1

我的一项服务依赖于 requestStack 中 currentRequest 对象中的 HTTP_HOST 值。在功能测试中使用此服务时,它可以工作,因为我使用主机参数创建客户端:

$client = static::createClient(array(), array(
   'HTTP_HOST' => 'test.' . $this->domain
));

在某些时候,我需要从依赖于请求的容器中获取服务,所以我认为我使用了使用主机值创建的客户端来获取服务:

$client->getKernel()->getContainer()->get('service')->someMethod();

但是在调用该服务的构造函数时,不再设置请求对象。

有什么方法可以在依赖于 Request 对象的测试函数中使用此服务?

相关代码:

控制器测试.php

//Create client with HTTP_HOST
$client = static::createClient(array(), array(
   'HTTP_HOST' => 'test.' . $this->domain
));

//Do some request services depending on the request object work because the client is initiated with the HTTP_HOST value
$crawler = $client->request('GET', $redirectUrl);        
$this->assertEquals(
   1,
   $crawler->filter('html:contains("feedback")')->count()
);

//Now I want to check if email feedback is send. This process starts in a EventSubsriber 
//I have to trigger this event myself because the $event variable consist of fake data.
$client->getContainer()->get('event_subscriber')->process($event);

//now collect the mail and do some checks
$mailCollector = $client->getProfile()->getCollector('swiftmailer');
$this->assertEquals(1, $mailCollector->getMessageCount());
4

1 回答 1

2

您应该直接从您创建的客户端获取容器,如官方文档中所述

$client->getContainer()->get('service')->someMethod();

可能仍然需要模拟整个服务,但需要更多代码示例。

于 2018-03-20T13:55:55.483 回答