如何測試多個用戶端的互動
如果您需要模擬不同用戶端之間的互動(例如聊天),請建立多個用戶端
1 2 3 4 5 6 7 8 9 10 11
// ...
use Symfony\Component\HttpFoundation\Response;
$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 14
// ...
use Symfony\Component\HttpFoundation\Response;
$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 程序中執行請求,從而避免任何副作用。
提示
由於隔離的用戶端速度較慢,您可以將一個用戶端保留在主程序中,並隔離其他用戶端。
警告
隔離測試需要一些序列化和反序列化操作。如果您的測試包含無法序列化的資料,例如使用 UploadedFile
類別時的檔案串流,您將會看到關於「不允許序列化」的例外。這是 PHP 的技術限制,因此唯一的解決方案是為這些測試停用隔離。
本作品,包括程式碼範例,依據 創用 CC BY-SA 3.0 授權條款發佈。