symfony3中的功能测试,提交表单后访问容器

时间:2016-11-03 14:54:13

标签: php symfony testing phpunit

我正在为我的Symfony3应用程序编写功能测试。我有一个看起来像这样的测试:

public function testList()
{
    $client = static::createClient();
    $client->getCookieJar()->set($this->cookie);

    $this->sender->method('isSuccessfull')->will($this->returnValue(true));

    $container = $client->getContainer();
    $container->set('app.service1', $this->object1);
    $container->set('app.service2', $this->object2);

    $crawler = $client->request('GET', '/list/1');
    $form = $crawler->selectButton('Save')->form();
    $client->submit($form);

}

在提交表格之前一切都很好。内核在提交表单时丢失了设置的容器服务。提交表格后,我怎样才能将这些服务转化为容器?也许还有其他选择来解决我的问题?

1 个答案:

答案 0 :(得分:1)

如果您检查source code for Symfony\Component\HttpKernel\Client::doRequest() class,您可以看到它终止内核,然后再次启动内核,这就是您放弃手动创建的所有服务的原因。

我猜您有一个正在测试的应用,因此您可以将服务添加到其services.yml。另一种方法是使用您自己的覆盖Client方法扩展getContainer()类以始终添加这些额外服务(然后您必须在编译过程中更新test.client的服务定义与您的自定义课程。)