Play Framework测试助手需要隐式`Materializer`

时间:2017-12-30 18:35:55

标签: scala playframework akka-http

我使用Play 2.6.x并且status(result)的测试帮助程序使用方法:
def status(of: Accumulator[ByteString, Result])(implicit timeout: Timeout, mat: Materializer): Int = status(of.run())

当编译器无法找到隐含值时,会运行测试: could not find implicit value for parameter mat: akka.stream.Materializer

什么是Materializer - 我假设它是Akka-HTTP的一部分

我怎样才能提供一个?

3 个答案:

答案 0 :(得分:3)

来自akka streams https://stackoverflow.com/a/36196948/2733350

  

Materializer是流执行引擎的工厂,它是   让溪流运行的东西

Materializer是Akka Streams的基石,其上构建了Akka HTTP。您需要隐式解析其中一个以使您的测试编译。

目前ActorMaterializer是唯一可用的Materializer实现。它是基于Akka docsMaterializer。这就是为什么要创建一个,你需要在范围内有ActorSystem

以下代码是您在测试中所需的代码:

implicit val sys = ActorSystem("MyTest")
implicit val mat = ActorMaterializer()

答案 1 :(得分:2)

表格中还有一种状态方法:

def status(of: Future[Result])(implicit timeout: Timeout): Int

确保控制器返回类型正确,以便操作返回Future[Result]

答案 2 :(得分:1)

这样做:

implicit val materializer = ActorMaterializer()