我正在为我的 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);
}
在提交表单之前一切都很好。提交表单时内核丢失设置的容器服务。提交表单后如何将这些服务也放入容器中?也许还有其他选择可以解决我的问题?
最佳答案
如果您检查 source code for Symfony\Component\HttpKernel\Client::doRequest()
class您可以看到它终止了内核,然后内核稍后再次启动,这就是您丢失所有手动创建的服务的原因。
我想您有一个正在测试的应用程序,因此您可以将服务添加到它的 services.yml
。另一种方法是使用您自己的方法扩展 Client
类并覆盖 getContainer()
方法以始终添加这些额外的服务(然后您必须更新 的服务定义code>test.client
在编译过程中与您的自定义类)。
关于php - symfony3中的功能测试,提交表单后访问容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40404674/