Как тестировать взаимодействие нескольких клиентов
Как тестировать взаимодействие нескольких клиентов
Если вам нужно сымитировать взаимодействие между разными клиентами (например, представьте себе чат), создайте несколько клиентов:
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
Так как изолированный клиент медленнее, вы можете держать одного клиента в основном процессе и изолировать остальных.