在 Rails 中,如何存根用于测试的 websocket 消息?

In Rails, how can I stub a websocket message for a test?

应用程序正在 Rails 4 上使用 Minitest 和 Capybara。

我想编写一个集成或功能测试,将 websocket 连接(应用程序使用 Faye 作为客户端)存根到 return 特定消息(就像我习惯使用 Webmock 一样) .

这可能吗?如果是这样,你能举个例子吗?我的研究没有发现任何例子。

您的研究没有显示任何示例,因为这不是您在功能测试中真正应该做的。功能测试应该是端到端的黑盒测试,您可以根据需要为应用配置数据以生成所需的结果,然后所有交互都通过浏览器完成(没有 mocking/stubbing 从技术上改变您的应用代码)。此外,当涉及浏览器和第三方服务之间的连接时,您的应用中没有任何地方可以模拟它。

可能可以使用可编程代理(如 puffing-billy)从浏览器建立 websocket 连接,但通常更干净的是生成一个小型的伪造版本的第 3 方服务以用于测试目的(sinatra 应用程序等)当您需要制作自定义响应时,将浏览器指向该服务而不是原始服务。此外,根据您使用的服务(fake-stripe、fake-s3 等),已经有很多假货,它们可能会提供您正在寻找的功能。