Symfony测试和环境

时间:2015-09-24 10:35:56

标签: php symfony testing phpunit environment-variables

我有以下问题:

我的路线仅为开发或测试目的而定义,我保护'通过在我的控制器中执行以下操作:

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检查时,所有测试都通过了。 可能是什么原因造成的?

2 个答案:

答案 0 :(得分:4)

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

应该是

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

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

此外,您可以通过仅在routing_dev.ymlrouting_test.yml中定义此路线(或者您需要以某种方式“包含”的等价物)来绕过所有这些混乱。

答案 1 :(得分:1)

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

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