【问题标题】:Silex web test failsSilex 网络测试失败
【发布时间】:2018-06-21 20:33:28
【问题描述】:

我正在尝试编写一个简单的 Web 测试来使用 phpunit 测试我的 silex api,但是 当我尝试运行它时,我不断收到此错误..

1) App\Tests\BlogControllerTest::testInitialPage
TypeError: Argument 1 passed to Symfony\Component\HttpKernel\Client::__construct() must implement interface Symfony\Component\HttpKernel\HttpKernelInterface, null given, called in C:\vendor\silex\silex\src\Silex\WebTestCase.php on line 63

这是我的网络测试

<?php
namespace App\Tests;

use Silex\WebTestCase;

class BlogControllerTest extends WebTestCase
{

    public function createApplication()
    {
        require dirname(dirname(__DIR__)) . '/src/Application.php';
    }
    public function testInitialPage()
    {
        $client  = $this->createClient();
        $crawler = $client->request('GET', '/Blog/1');

        $this->assertTrue($client->getResponse()->isOk());

    }
}

我的 Composer 文件的内容:

{
    "require": {
        "silex/silex": "~2.0",
        "symfony/validator": "^4.0",
        "crell/api-problem": "~1.7",
        "tobiassjosten/responsible-service-provider": "^1.0"
    },
    "require-dev": {
        "phpunit/phpunit": "6",
        "symfony/browser-kit": "^4.0",
        "symfony/css-selector": "^4.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

【问题讨论】:

  • 第 63 行到底是哪一行?是createClient() 吗?那么就像报错所说的,你得给实现HttpKernelInterface(或者mock)的函数加个参数
  • 1) App\Tests\BlogControllerTest::testInitialPage TypeError: 传递给 Symfony\Component\HttpKernel\Client::__construct() 的参数 1 必须实现接口 Symfony\Component\HttpKernel\HttpKernelInterface,给定 null,在第 63 行 C:\vendor\silex\silex\src\Silex\WebTestCase.php 中调用 C:\vendor\symfony\http-kernel\Client.php:42 C:\vendor\silex\silex\src\Silex\ WebTestCase.php:63 C:\tests\CarType\CarTypeControllerTest.php:15

标签: php symfony phpunit silex


【解决方案1】:

来自documentation

对于您的WebTestCase,您必须实现一个 createApplication 方法,该方法返回您的应用程序实例:

public function createApplication()
{
    // app.php must return an Application instance
    return require __DIR__.'/path/to/app.php';
}

这就是你需要的:

public function createApplication()
{
    return new Application();
}

但在大多数情况下,最好从您的引导程序 (bootstrap example) 返回已配置的应用程序:

public function createApplication()
{
    require __DIR__.'../web/index-test.php'; // path to your bootstrap file
    return $app;
}

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多