Websocket 测试 [功能]

Websocket Testing [Functional]

我在 PHP 中使用 Ratchet for websockets。我能够为 websockets 编写单元(phpspec)和验收测试(behat),但我找不到如何通过使用功能性 phpunit 测试来测试与 websocket 服务器的连接的方法。我认为是一个测试,它检查是否连接已启动并且 运行 非常重要。我想到了以下内容:

  1. 在 phpunit 中创建一个(棘轮)客户端
  2. 连接到 ws url(例如 client->connect(host, port, ...)
  3. ping websocket / 发送/接收一些消息(客户端的调用方法,例如 client->push(..)..)

问题是,我不知道哪个 class 负责在 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()
);

或者例如创建经过身份验证的客户端而不是匿名客户端。 "translate" 这个功能测试怎么可能变成棘轮 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";
        });
    }

如果您还有任何问题,请告诉我。