返回首页 Symfony2 Cookbook

Assetic

Bundles

缓存

Composer

配置

控制台

Controller

调试

部署

Doctrine

电子邮件

事件分发器

表达式

表单

前端

日志

分析器

请求

路由

安全

序列化

服务容器

会话

PSR-7

Symfony 版本

模板

测试

升级

验证

Web 服务器

Web 服务

工作流

如何测试多个客户端的交互

如果您需要模拟不同客户之间的互动(比如说一个聊天),先创建几个客户:

// ...

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

当您的代码存在于一个全局状态(global state)或者它依赖的第三方库中存在全局状态,不存在这个工作。这种情况下,您可以隔离您的用户:

// ...

$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 过程中透明地执行它们的需求,从而避免一切副作用。

由于隔离的用户更慢,您可以在主过程(main process)中留下一个用户,然后隔离其他用户。