2016-07-04 68 views
2

我想爲websocket進行單元測試。從doc,我應該能夠使用WSWebsocket單元測試:從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

謝謝

+0

談到一個假設你有問題。代碼中的println不一定在運行時運行。至少第一個在路由聲明時運行(一次)。第二個我不確定 - 這取決於。某些指令會導致內部路由在運行時進行評估。 – akauppi

回答

1

爲了讓上面的代碼工作,在route,路徑/wkst應該是沒有任何斜線

def route = { 
    path("wskt") { 
     println("websocket ws") 
     handleWebSocketMessages(flow) 
    } ~ 
     path(Rest) { pathRest => 
     println("path Rest") 
     getFromFile(s"webapp/$pathRest") 
     } 
    }