在控制器测试中覆盖Symfony 3.3容器服务

时间:2017-06-07 04:45:21

标签: php symfony dependency-injection phpunit symfony-3.3

我对依赖于需要在测试环境中模拟的第三方API的控制器进行了一系列测试。我们覆盖功能测试客户端爬虫并模拟我们需要测试的依赖项。这里的关键是每次测试都会改变模拟。

在Symfony 3.2中,这个工作正常,但在Symfony 3.3中,由于现在注入服务的方式,我有一些弃用警告:

示例控制器测试用例:

public function testInvalidPropertyRequest()
{
    $client = $this->getPropertyClient();
    $client->request(
        'POST',
        '/webhook/property',
        [],
        [],
        [],
        ''
    );
    $this->assertEquals(400, $client->getResponse()->getStatusCode());
}

实际测试:

   xmlhttp.onreadystatechange = function() {
       if (this.readyState == 4 && this.status == 200) {
         var doc = xmlhttp.response;
         myFunc(doc);
       }
   };
   xmlhttp.open("GET","some.php",true);
   xmlhttp.responseType = "json";
   xmlhttp.send();

弃用错误:

  

设置" app.property_service"预定义的服务是   自Symfony 3.3以来已弃用,并且在Symfony中不再受支持   4.0:3x

我已经通过3.3发布文档,BC中断和弃用,并且无法弄清楚如何在配置后使用模拟替换容器服务。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我也面临这个问题,而且Container类中没有关于如何处理这种弃用的提示。

//对于所有感兴趣的人来说,github上有一个current issue - 但除了为你的单元测试提供更多的自举代码或者单独测试控制器之外,没有真正的解决方案。 我建议将所有控制器定义为具有固定/定义的依赖性且没有直接DIC使用的服务。