我有以下问题:
我的路线仅为开发或测试目的而定义,我保护'通过在我的控制器中执行以下操作:
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检查时,所有测试都通过了。 可能是什么原因造成的?
答案 0 :(得分:4)
if ($env !== 'test' || $env !== 'dev')
应该是
if ($env !== 'test' && $env !== 'dev')
此外,您不需要身份匹配,但只需要值匹配,因为您在此确定您正在比较字符串
此外,您可以通过仅在routing_dev.yml
和routing_test.yml
中定义此路线(或者您需要以某种方式“包含”的等价物)来绕过所有这些混乱。
答案 1 :(得分:1)
您还可以匹配调试参数,以防止您将每个新环境添加到比较中:
if (!$this->get('kernel')->isDebug()) {
// ...
}