我正在为我的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);
}
在提交表格之前一切都很好。内核在提交表单时丢失了设置的容器服务。提交表格后,我怎样才能将这些服务转化为容器?也许还有其他选择来解决我的问题?
答案 0 :(得分:1)
如果您检查source code for Symfony\Component\HttpKernel\Client::doRequest()
class,您可以看到它终止内核,然后再次启动内核,这就是您放弃手动创建的所有服务的原因。
我猜您有一个正在测试的应用,因此您可以将服务添加到其services.yml
。另一种方法是使用您自己的覆盖Client
方法扩展getContainer()
类以始终添加这些额外服务(然后您必须在编译过程中更新test.client
的服务定义与您的自定义课程。)