玩!Scala:测试时如何禁用在应用程序开始时加载的actor模块?

Sim*_*mon 2 scala guice akka playframework

我在 Play 开始时加载了一些演员!2.5 这样的应用:

class Module extends AbstractModule with AkkaGuiceSupport with ScalaModule {
  override def configure() = {
    bindActor[MainSupervisor]("main-supervisor")
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行测试时,我从加载的参与者(以及整个集群和远程系统)那里得到了很多日志(和不必要的调用),比如

[INFO ] a.r.Remoting: Starting remoting 
[INFO ] a.r.Remoting: Remoting started; listening on addresses :[akka.tcp://application@127.0.0.1:41496] 
[INFO ] a.r.Remoting: Remoting now listens on addresses: [akka.tcp://application@127.0.0.1:41496] 
Run Code Online (Sandbox Code Playgroud)

例如,我测试了一个不需要任何演员的类,但我找不到任何方法来禁用它们(甚至更好的是整个演员系统)。

我尝试过的是:

lazy val appWithoutActorsBuilder = new GuiceApplicationBuilder()
  .disable[ActorSystem]
  .disable[MainSupervisor]
  .build()
lazy val injectorWithoutActors = appWithoutActorsBuilder.injector
lazy val wSClientWithoutActors = injectorWithoutActors.instanceOf[WSClient]
lazy val ec = scala.concurrent.ExecutionContext.Implicits.global
lazy val facebookAPI = new FacebookAPI(wSClientWithoutActors, ec)
Run Code Online (Sandbox Code Playgroud)

但是当我测试 FacebookAPI 方法(例如facebookAPI.method(...) mustBe ...)时,我仍然看到来自 Akka 的日志。我该怎么做才能避免它?

mar*_*ira 5

你必须禁用你的模块而不是你的演员。所以,考虑到你有这个类:

package com.acme.modules

class Module extends AbstractModule with AkkaGuiceSupport with ScalaModule {
  override def configure() = {
    bindActor[MainSupervisor]("main-supervisor")
  }
}
Run Code Online (Sandbox Code Playgroud)

并且您正在conf/application.conf像这样注册它:

play.modules.enabled += "com.acme.modules.Module"
Run Code Online (Sandbox Code Playgroud)

然后,在您的测试中,您必须执行以下操作:

lazy val appWithoutActorsBuilder = new GuiceApplicationBuilder()
  .disable[com.acme.modules.Module]
  .build()
Run Code Online (Sandbox Code Playgroud)