如何访问Web测试用例中客户端请求使用的Symfony服务?

时间:2015-02-10 09:56:28

标签: symfony

我有一个依赖第三方服务的应用程序。为了确保应用程序正常运行,我想模拟第三方服务并确保应用程序按预期工作。

这要求我能够在创建请求之前配置模拟服务。但是,我无法这样做。

请考虑以下代码:

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
//..

class MyTest extends WebTestCase
{

    public function testSignupLink()
    {
        $container = static::createClient()->getContainer();

        // This returns a different instance from the one used by the client request
        $service = $container->get('third-party-service');
        $service->setErrorState(MockService::SOME_ERROR_STATE);
        // ...

        // The request creates a new instance of the $service internally which doesn't have the error state that was set above
        $client->request('POST', '/abc/1');
    }
}

'abc'控制器依赖于我无法访问的服务。当我从容器访问服务时,我从客户端请求使用的实例获得了不同的实例。

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果我正确理解你,这就是你需要的: https://github.com/PolishSymfonyCommunity/SymfonyMockerContainer