Как тестировать взаимодействие нескольких клиентов¶
Если вам нужно сымитировать взаимодействие между разными клиентами (например, представьте себе чат), создайте несколько клиентов:
// ...
$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());
Это работает во всех случаев, за исключением того, если в вашем коде есть глобальное состояние или если он зависит от сторонней библиотеки, которая имеет какое-либо глобальное состояние. В таком случае, вы можете изолировать ваших клиентов так:
// ...
$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.