我正在使用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的一部分
我怎么能提供一个呢?
来自akka streams docs:
Materializer是流执行引擎的工厂,它使流运行[...]
Materializer
是Akka Streams的基石,Akka HTTP就是建立在它上面的。您需要隐式解析其中一个以使您的测试编译。
目前ActorMaterializer
是唯一可用的Materializer
实现。这是一个基于Akka Materializer
的actors。这就是为什么要创建一个,你需要反过来在范围内有一个ActorSystem
。
您在测试中需要以下代码:
implicit val sys = ActorSystem("MyTest")
implicit val mat = ActorMaterializer()
表格中还有一种状态方法:
def status(of: Future[Result])(implicit timeout: Timeout): Int
确保控制器返回类型正确,因此操作返回Future[Result]
这样做怎么样:
implicit val materializer = ActorMaterializer()