使用支持WebSocket的浏览器进行集成测试



我正在尝试使用WithBrowser:对我的WebSocket代码进行一些简单的集成测试

  class ApplicationControllerSpec extends Specification{
    "Application Controller" should {
      "do something" in new WithBrowser{
        browser.goTo("http://localhost:3333")
        browser.pageSource must contain("Hello")
      }
    }
  }

当我这样做的时候,我会得到一个很长的错误,但其中一部分说:

WebDriverException:com.gargoylesoftware.htmlunit.ScriptException:ReferenceError:未定义"WebSocket"。

是否有一种替代的WebDriver确实实现了WebSocket?或者,有没有办法让它真正打开firefox或chrome?

我也很感激关于如何测试WebSocket代码的任何建议,但这里似乎还有另一个未回答的问题。

我正在使用Play 2.1.3。

我用Firefox测试WebSockets:

https://github.com/schleichardt/stackoverflow-answers/commit/13d5876791ef409e092e4a097f54247d851e17dc#L8R14

WithBrowser支持浏览器作为第一个参数,请参阅文档。

所以它可能看起来像

 class ApplicationControllerSpec extends Specification{
    "Application Controller" should {
      "do something" in new WithBrowser(play.api.test.Helpers.FIREFOX){
        browser.goTo("http://localhost:3333")
        browser.pageSource must contain("Hello")
      }
    }
  }

如果您使用firefox,最好为其加载最新的selenium驱动程序。

我不知道你为什么要使用WithBrowser来测试你的websocket,但这是我是怎么做的:

class ApplicationSpec extends Specification {
  "Application" should {
    "work" in {
      running(TestServer(9000)) {
        val client = new WebSocketClient(URI.create("ws://localhost:9000/test"),
          new Draft_17(), Map("HeaderKey1" -> "HeaderValue1"), 0) {
          def onError(p1: Exception) {
            println("onError")
          }
          def onMessage(message: String) {
            println("onMessage, message = " + message)
          }
          def onClose(code: Int, reason: String, remote: Boolean) {
            println("onClose")
          }
          def onOpen(handshakedata: ServerHandshake) {
            println("onOpen")
          }
        }
        client.connectBlocking()
        client.send("message")
        Thread.sleep(1000)
        success
      }
    }
  }
}

我正在使用Java WebSocket来调用WebSocket。这个库甚至可以发送握手过程中的自定义http头。

请注意,我不做任何断言,所以我必须在测试结束时返回成功。我需要一个Thread.sleep,否则可能会发生RuntimeException("没有启动的应用程序"),因为测试在websocket通信完成之前完成。

相关内容

  • 没有找到相关文章

最新更新