scala Play Framework测试协助程式需要隐含的'Materializer'

wwodge7n  于 2022-11-29  发布在  Scala
关注(0)|答案(4)|浏览(149)

我使用的是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
物化器是什么--我假设它是Akka-HTTP的一部分
我怎么能提供一个?

628mspwn

628mspwn1#

从 akka 溪docs
Materializer是流执行引擎的工厂,它是使流运行的东西[...]
Materializer是Akka Streams的基石,Akka HTTP就是建立在它上面的。你需要隐式解析其中的一个来编译你的测试。
目前ActorMaterializerMaterializer唯一可用的实现。它是基于Akka演员的Materializer。这就是为什么要创建一个Materializer,你需要在作用域中有一个ActorSystem
下面的代码是您在测试中所需要的:

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
implicit val sys = ActorSystem("MyTest")
implicit val mat = ActorMaterializer()
xwbd5t1u

xwbd5t1u2#

还有一个status方法,其形式为:

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

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

zu0ti5jz

zu0ti5jz3#

这样做怎么样:

implicit val materializer = ActorMaterializer()
i7uaboj4

i7uaboj44#

从Play 2.6.0开始,ActorMaterializer()已被弃用,但您可以这样做:

val as = ActorSystem()
 implicit val materializer = Materializer(as)

相关问题