2
我想爲websocket進行單元測試。從doc,我應該能夠使用WS
Websocket單元測試:從ScalaTestRouteTest WS不做websocket請求
看到一個SSCCE低於
package com.streamingout
import akka.http.scaladsl.model.ws.TextMessage
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.PathMatchers.Rest
import akka.http.scaladsl.testkit.{ScalatestRouteTest, WSProbe}
import akka.stream.scaladsl.{Flow, Sink, Source}
import org.scalatest.{FlatSpec, Matchers}
class Test extends FlatSpec with Matchers with ScalatestRouteTest{
//--------------- Flow ---------------
def flow = {
import scala.concurrent.duration._
val source = Source.tick(initialDelay = 0 second, interval = 1 second, tick = TextMessage("tick"))
Flow.fromSinkAndSource(Sink.ignore, source)
}
//-------------- Routing ------------
def route = {
path("/wskt") {
println("websocket ws")
handleWebSocketMessages(flow)
} ~
path(Rest) { pathRest =>
println("path Rest")
getFromFile(s"webapp/$pathRest")
}
}
// create a testing probe representing the client-side
val wsClient = WSProbe()
// WS creates a WebSocket request for testing
WS("/wskt", wsClient.flow) ~> route ~> check {
// check response for WS Upgrade headers
isWebSocketUpgrade shouldEqual true
}
}
當我運行測試,我可以在我的控制檯中看到的path Rest
消息,這意味着WS
犯規升級到WebSocket的。
任何人都知道我的代碼有什麼問題?
我使用阿卡2.4.7
謝謝
談到一個假設你有問題。代碼中的println不一定在運行時運行。至少第一個在路由聲明時運行(一次)。第二個我不確定 - 這取決於。某些指令會導致內部路由在運行時進行評估。 – akauppi