Php Symfony测试与环境
我有以下问题: 我有一个仅为开发或测试目的而定义的路由,我通过在控制器中执行以下操作来“保护”该路由:Php Symfony测试与环境,php,symfony,testing,phpunit,environment-variables,Php,Symfony,Testing,Phpunit,Environment Variables,我有以下问题: 我有一个仅为开发或测试目的而定义的路由,我通过在控制器中执行以下操作来“保护”该路由: public function testAction() { $env = $this->container->get('kernel')->getEnvironment(); if ($env !== 'test' || $env !== 'dev') { throw $this->createNotFoundExceptio
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
FTESTFEST。。。。。。。。。。(来自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\u dev.yml
和routing\u test.yml
(或您需要以某种方式“包括”的等效项)中定义此路由来绕过所有这些混乱情况您还可以匹配调试参数,以防止将您创建的每个新环境添加到比较中:
if (!$this->get('kernel')->isDebug()) {
// ...
}
在走了5分钟后,我得出了同样的结论,我将把它放在routing_dev.yml中。感谢您的澄清