WARNING: You are browsing the documentation for Symfony 2.1 which is not maintained anymore. Consider upgrading your projects to Symfony 4.1.

How to test the Interaction of several Clients

2.1 version
Unmaintained

How to test the Interaction of several ClientsΒΆ

If you need to simulate an interaction between different Clients (think of a chat for instance), create several Clients:

1
2
3
4
5
6
7
8
$harry = static::createClient();
$sally = static::createClient();

$harry->request('POST', '/say/sally/Hello');
$sally->request('GET', '/messages');

$this->assertEquals(201, $harry->getResponse()->getStatusCode());
$this->assertRegExp('/Hello/', $sally->getResponse()->getContent());

This works except when your code maintains a global state or if it depends on a third-party library that has some kind of global state. In such a case, you can insulate your clients:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$harry = static::createClient();
$sally = static::createClient();

$harry->insulate();
$sally->insulate();

$harry->request('POST', '/say/sally/Hello');
$sally->request('GET', '/messages');

$this->assertEquals(201, $harry->getResponse()->getStatusCode());
$this->assertRegExp('/Hello/', $sally->getResponse()->getContent());

Insulated clients transparently execute their requests in a dedicated and clean PHP process, thus avoiding any side-effects.

Tip

As an insulated client is slower, you can keep one client in the main process, and insulate the other ones.

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.