liip / LiipFunctionalTestBundle

Some helper classes for writing functional tests in Symfony
http://liip.ch
MIT License
640 stars 181 forks source link

[2.0] Allow to mock services when running command #463

Open magnetik opened 6 years ago

magnetik commented 6 years ago

Is your feature request related to a problem? Please describe. I'm "mocking" some services when using the test client. It's something like that:

$client = $this->getClient();
$clientMock = $this->getMockBuilder(Client::class)
        ->disableOriginalConstructor()
        ->getMock();

$clientMock
    ->method('doThings')
    ->willReturn(true);

$client->getContainer()->set(Client::class, $clientMock);

Describe the solution you'd like Instead of running the command directly, a CommandClient could be created (that could be like the "HttpClient", that allows to run any command and access the container before.

Describe alternatives you've considered Maybe instead of having the ability to reuse the current kernel in protected function runCommand(string $name, array $params = [], bool $reuseKernel = false), it could be useful to provide your own kernel (and use a kernel from createClient ?)

Jean85 commented 6 years ago

I fear that that approach could be flawed. The reason for reusing the kernel is that it's already booted, so any edit is not lost before launching the command.

How would you suggest to pass a different Kernel? Wouldn't be dangerous, due to differences in respect to the system under test?

magnetik commented 6 years ago

Indeed I prefer the first approach (having a CommandClient that allow container modification).