複数のクライアントのインタラクションをテストする方法

チャットシステムのように異なるクライアント間のインタラクションをシミュレートする必要がある際には、次のようにクライアントを複数作成します。

$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());

コードがグローバルステートを維持するとき以外、もしくは、サードパーティのライブラリがグローバルステートのようなものを持っているとき以外は、動作します。このようなケースでは、クライアントを分離することができます。

$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());

透過的に分離されたクライアントは専用のクリーンな PHP のプロセスで実行されますので、副作用を避けることができます。

Tip

クライアントの分離は遅いので、クライアントを1つメインプロセスに保持しておき、他のクライアントを分離しましょう。

前のドキュメント

ファンクショナルテストで HTTP 認証をシミュレートする方法

次のドキュメント

ファンクショナルテストでプロファイラを使用する方法

ソース