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

问题描述 投票:2回答:3

我正在使用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的一部分

我怎么能提供一个呢?

scala playframework akka-http
3个回答
3
投票

来自akka streams docs

Materializer是流执行引擎的工厂,它使流运行[...]

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

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

您在测试中需要以下代码:

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

2
投票

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

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

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


1
投票

这样做怎么样:

implicit val materializer = ActorMaterializer()
© www.soinside.com 2019 - 2024. All rights reserved.