Symfony2 + Codeception提供"您必须覆盖KernelTestCase :: createKernel()"

时间:2016-01-18 08:59:13

标签: symfony codeception

我创建了一个继承自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

4 个答案:

答案 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;