如何真正测试akka流?

时间:2019-05-12 21:05:29

标签: scala akka akka-stream scalatest

我正在使用WebsocketClient,并想对收到的消息进行测试。我选择了Scalatest框架,并且知道测试是异步进行的。

websocket客户端如下所示:

import akka.{Done}
import akka.http.scaladsl.Http
import akka.stream.scaladsl._
import akka.http.scaladsl.model.ws._
import io.circe.syntax._

import scala.concurrent.Future


object WsClient {

  import Trigger._

  private val convertJson: PreMsg => String = msg =>
    msg.asJson.noSpaces

  val send: PreMsg => (String => Unit) => RunnableGraph[Future[Done]] = msg => fn =>
    Source.single(convertJson(msg))
      .map(TextMessage(_))
      .via(Http().webSocketClientFlow(WebSocketRequest(s"ws://{$Config.host}:{$Config.port}/saprs")))
      .map(_.asTextMessage.getStrictText)
      .toMat(Sink.foreach(fn))(Keep.right)


}  

和测试:

  feature("Process incoming messages") {
    info("As a user, I want that incoming messages is going to process appropriately.")
    info("A message should contain the following properties: `sap_id`, `sap_event`, `payload`")

    scenario("Message is not intended for the server") {
      Given("A message with `sap_id:unknown`")
      val msg = PreMsg("unknown", "unvalid", "{}")
      When("the message gets validated")
      val ws = WsClient.send(msg)
      Then("it should has the `status: REJECT` in the response content")
      ws { msg =>
        //Would like test against the msg here
      }.run()
        .map(_ => assert(1 == 1))

    }  

我会针对msg的内容进行测试,但我不知道如何执行。

1 个答案:

答案 0 :(得分:3)

我关注了play-scala-websocket-example

他们使用 WebSocketClient 作为帮助程序,请参见WebSocketClient.java

然后测试如下:

array(1) {
  ["Service Stang"]=>
  int(2)
}

参见此处:FunctionalSpec.scala