scala - 测试流式传输响应的 Play 框架 Controller

标签 scala playframework stream

我有一个发送分 block 响应的 Controller :

def streamDatase2t(query:String): Action[AnyContent] = Action.async {
    req =>
        serivce.getIterator(query).map(res => {
            Ok.chunked(Source.apply(res))
        })
  }

当我尝试检查 Controller 规范中的返回内容时,出现异常:

  "return 200 response with the content of the iterator" in {
      when(serivce.getIterator
      (Matchers.any[Request.DatasetLoad],
        Matchers.any[ResponseFormat], Matchers.any[Int]))
        .thenReturn(Future.successful(new FakeIterable(List("One", "Two", "Three").iterator)))

      val fakeRequest = FakeRequest.apply("GET", s"/data")

      val result = Helpers.route(fakeApp, fakeRequest).get
      checkStatus(result, OK)
      contentAsString(result) // <-- exception here ! 
    }

异常(exception):

NoMaterializer cannot materialize
java.lang.UnsupportedOperationException: NoMaterializer cannot materialize
    at play.api.test.NoMaterializer$.materialize(Helpers.scala:732)
    at akka.stream.scaladsl.RunnableGraph.run(Flow.scala:629)
    at akka.stream.scaladsl.Source.runWith(Source.scala:106)
    at akka.stream.scaladsl.Source.runFold(Source.scala:117)
    at play.api.http.HttpEntity.consumeData(HttpEntity.scala:49)
    at play.api.http.HttpEntity.consumeData$(HttpEntity.scala:48)
    at play.api.http.HttpEntity$Chunked.consumeData(HttpEntity.scala:117)
    at play.api.test.ResultExtractors.contentAsBytes(Helpers.scala:381)
    at play.api.test.ResultExtractors.contentAsBytes$(Helpers.scala:379)
    at play.api.test.Helpers$.contentAsBytes(Helpers.scala:676)

最佳答案

由于异常声明 NoMaterializer 无法实现,您可能需要添加一个 Materializer:

implicit lazy val mat = ActorMaterializer()
implicit lazy val ec = instanceOf[ExecutionContext]

关于scala - 测试流式传输响应的 Play 框架 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59839849/

相关文章:

scala - Spark 中的广播变量

scala - 如何在 Play 2.0.1 中使用 TestServer 运行多个功能规范?

php - 如何创建一个假的/"virtual"文件?

c# - 读取文本文件并继续格式化

Node.Js Through2-修改流

scala - 密封特征和动态案例对象

scala - 未找到 LabelledGeneric 的无形映射器

scala - 从另一个 RDD 中减去一个 RDD 无法正常工作

java - 如何使用 Java 在 Play Framework 中上传多个文件

scala - Play 2.1 或更高版本中的并发