我创建了一个继承自WebTestCase的新测试。当我运行我的代码测试时,我收到以下错误:
[RuntimeException] You must override the KernelTestCase::createKernel() method.
我不清楚我需要覆盖它。我想要的是一个可以调用某个URI来获取我的http响应的客户端
这是测试:
public function testSearchAction()
{
$searchUri = '/search';
$client = static::createClient();
$client->request('GET', $searchUri);
$response = $client->getResponse();
$this->assertSame(Response::HTTP_BAD_REQUEST, $response->getStatusCode());
}
这是我的unit.suite.yml文件
class_name:UnitTester
modules:
enabled:
- Symfony2:
app_path: '../../app'
var_path: '../../app'
- Doctrine2:
depends: Symfony2
- AppBundle\Helper\Unit
答案 0 :(得分:2)
我在尝试将从WebTestCase扩展的现有测试集成到Codeception时遇到了同样的问题。在KERNEL_DIR
中设置tests/functional/_bootstrap.php
为我解决了问题:
<?php
$_SERVER['KERNEL_DIR'] = __DIR__ . '/../../app/';
答案 1 :(得分:1)
可以运行基础WebTestCase(或简单的PHPUnit \ Framework \ TestCase)。 在unit.suite.ym文件中,添加boostrap设置:
# tests/unit.suite.ym
modules:
enabled:
- Symfony2:
app_path: '../../app'
var_path: '../../app'
- Doctrine2:
depends: Symfony2
- AppBundle\Helper\Unit
bootstrap: _bootstrap.php
创建tests / unit / _bootstrap.php文件
<?php
$_SERVER['KERNEL_DIR'] = __DIR__ . '/../../app/';
_bootstrap文件的加载由侦听器Codeception \ Subscriber \ Bootstrap :: loadBootstrap()
完成答案 2 :(得分:0)
异常您必须覆盖KernelTestCase :: createKernel()方法可以通过在文件app / phpunit.xml.dist中设置 KERNEL_DIR 参数来解决。 默认情况下,此文件中有关 KERNEL_DIR 的部分已注释。
内核的完整路径可能如下所示:
<php>
<server name="KERNEL_DIR" value="C:/symfonyProjects/project1/app" />
</php>
答案 3 :(得分:0)
如果您在Symfony 4中遇到此错误,则解决方案已更改。
在Symfony 2和3中,您可以在tests / functional / _bootstrap.php中设置KERNEL_DIR:
<?php
$_SERVER['KERNEL_DIR'] = __DIR__ . '/../../app/';
在Symfony 4中,你应该在tests / functional / _bootstrap.php中设置KERNEL_CLASS:
<?php
$_SERVER['KERNEL_CLASS'] = App\Kernel::class;