2

我正在尝试测试一些操作。他们需要我使用 Silhouette 创建的安全材料。

我有一个模块来配置 DI 中的剪影security.Module,在我的conf/application.conf文件中我有以下行:

play.modules.enabled += "security.Module"

当我运行测试时,我收到一条错误消息:

No implementation for com.mohiva.play.silhouette.api.Silhouette<security.JwtEnv> was bound.

如果我在security.Module课堂上设置断点,它永远不会被触发。但是,如果我在我的主Module类中设置一个断点,它就是。security.Module因此,尽管GuiceApplicationBuilder的文档说启用的模块是自动加载的,但我可以看到我的模块从未被加载。

这是我GuiceApplicationBuilder在测试类中的配置方式(基于 scalatest):

class TestUserController extends PlaySpec with OneAppPerTest with Results {

  val identity = UserDao(
    id = Some(10),
    email = Some("testuser@example.com"),
    createdAt = DateTime.parse("2016-11-11T11:11:11")
  )

  val loginInfo = LoginInfo("credentials", identity.email.get)

  implicit val env = FakeEnvironment[JwtEnv](Seq(loginInfo -> identity))

  implicit override def newAppForTest(td: TestData) = new GuiceApplicationBuilder()
    .overrides(bind[UsersBlockedRepo].to[MockUsersBlockedRepo])
    .build
//...
}

我缺少什么GuiceApplicationBuilder来加载我的安全模块?

4

1 回答 1

1

我已经解决了这个问题。问题是我security.Module采用了构造函数参数:

class Module(environment: PlayEnvironment,
         configuration: Configuration) extends AbstractModule with ScalaModule {...}

删除那些修复它。

于 2016-12-01T16:59:47.930 回答