Symfony 测试和环境

Symfony Tests and environment

我有以下问题:

我定义了一个仅用于开发或测试目的的路由,我 'protect' 通过在我的控制器中执行以下操作:

public function testAction()
{
    $env = $this->container->get('kernel')->getEnvironment();

    if ($env !== 'test' || $env !== 'dev')
    {
        throw $this->createNotFoundException('Oops, page not available in production environment...');
    }

    ...
}

现在这在生产中运行良好,但是当我尝试 运行 我的测试时它一直触发 404。

当我在测试期间回显 $env 变量时,它说:test

FtestFtestFtest........(来自 phpunit 的输出)

我试过使用 !=" 但没有成功。

在测试中我做了类似的事情:

$client = static::createClient();
$client->request('GET', '/basecontroller/test');
$this->assertEquals(200, $client->getResponse()->getStatusCode());

当我注释掉 $env 时检查所有测试是否通过。 这可能是什么原因?

if ($env !== 'test' || $env !== 'dev')

应该是

if ($env !== 'test' && $env !== 'dev')

此外,您不需要身份匹配,只需要值匹配,因为您在这里确定您正在比较字符串

此外,您可以通过仅在 routing_dev.ymlrouting_test.yml 中定义此路由(或您需要 "include" 的等效项)

来绕过所有这些混乱

您还可以匹配调试参数,以防止您创建的每个新环境都应添加到比较中:

if (!$this->get('kernel')->isDebug()) {
    // ...
}