我在 PHP 中将 Ratchet 用于 websockets。我能够为 websockets 编写单元(phpspec)和验收测试(behat),但我找不到如何通过使用功能性 phpunit 测试来测试与 websocket 服务器的连接的方法。我认为是一个测试,它检查是否连接已启动并正在运行,这将非常重要。我想到了以下内容:
- 在 phpunit 中创建一个( Ratchet )客户端
- 连接到 ws url(例如 client->connect(host, port, ...)
- ping websocket/发送/接收一些消息(客户端的调用方法,例如client->push(..)..)
问题是,我不知道哪个类负责在 Ratchet 中建立连接(创建一个可以请求 websocket 的客户端)以及测试会是什么样子。如何创建 Ratchet Client 以便能够在 phpunit 功能测试中连接和请求 websocket? (类似于标准 phpunit 功能测试中的网络客户端)
例如,在功能测试中,我可以执行以下操作:
$client = static::createClient();
$client->request('GET', '/book/3', array(), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest'));
$response = $client->getResponse();
$this->assertEquals(
440,
$response->getStatusCode()
);
或者例如创建经过身份验证的客户端而不是匿名客户端。怎么可能将这个功能测试“翻译”成 Ratchet websocket 测试?
最佳答案
我希望这能部分解决您的问题,即 Ratchet Websocket 的哪一部分负责建立连接。
测试本身可能无法运行,我对 PHP 测试没有那么丰富的经验,尽管它应该会让您走上正确的道路。
public function testCanConnect()
{
\Ratchet\Client\connect('ws://127.0.0.1:8080')->then(function($conn) {
$conn->on('message', function($msg) use ($conn) {
print $msg."\n";
$this->assertEquals('true',true);
$this->assertEquals("Hello World",$msg);
$conn->close();
});
$conn->send('Hello World!');
}, function ($e) {
echo "Could not connect: {$e->getMessage()}\n";
});
}
如果您还有任何问题,请告诉我。
关于php - Websocket 测试 [功能],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37284963/