Jeroen
Jeroen

Reputation: 2021

Symfony functional test: Current request not set when fetching service from container

One of my services depends on the HTTP_HOST value in the currentRequest object from the requestStack. When this service is used in a functional test it works because I create the client with the host parameter:

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

At some point I have the need to get a service from the container that has a dependency on the request so i thought i used the client created with the host value to fetch the service:

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

But the request object is no longer set when the constructer of this service is is called.

Is there any way I can use this service in the test function with a dependency on the Request object ?

Related code:

ControllerTest.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());

Upvotes: 1

Views: 885

Answers (1)

Chris
Chris

Reputation: 799

You should get the Container directly from your created client, as described in the official docs:

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

It may still be necessary to mock the whole service but more code examples would be needed..

Upvotes: 2

Related Questions