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

How to access a Symfony service that is used by a client request in a web test case?

提问人:mandark 提问时间:2/10/2015 最后编辑:mandark 更新时间:2/10/2015 访问量:118

问:

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

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

请考虑以下代码:

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”控制器依赖于我无法访问的服务。当我从容器访问服务时,我得到的实例与客户端请求使用的实例不同。

有什么方法可以解决这个问题吗?

Symfony的

评论

0赞 Alexandru Olaru 2/10/2015
需要有关您要执行的操作的更多详细信息
0赞 mandark 2/10/2015
我添加了有关我正在尝试做的事情的更多详细信息。如果您需要其他详细信息,请告诉我。

答:

2赞 Alexandru Olaru 2/10/2015 #1

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