Как тестировать взаимодействие нескольких клиентов

Если вам нужно сымитировать взаимодействие между разными клиентами (например, представьте себе чат), создайте несколько клиентов:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// ...

$harry = static::createClient();
$sally = static::createClient();

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

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

Это работает во всех случаев, за исключением того, если в вашем коде есть глобальное состояние или если он зависит от сторонней библиотеки, которая имеет какое-либо глобальное состояние. В таком случае, вы можете изолировать ваших клиентов так:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// ...

$harry = static::createClient();
$sally = static::createClient();

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

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

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

Изолированные клиенты прозрачно выполняют свои запросы в выделенном и чистом PHP-процессе, таким образом избегая любых побочных эффектов.

Tip

Так как изолированный клиент медленнее, вы можете держать одного клиента в основном процессе и изолировать остальных.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.