Scala 找不到参数env:com.mohiva.play.screet.api.Environment[utils.auth.DefaultEnv]的隐式值
我使用的是带有play framework 2.5的剪影v4.0库。 并且一直在尝试使用play specs2编写测试代码。 但是,我的测试类出现以下错误,如下所示 错误消息Scala 找不到参数env:com.mohiva.play.screet.api.Environment[utils.auth.DefaultEnv]的隐式值,scala,playframework,silhouette,Scala,Playframework,Silhouette,我使用的是带有play framework 2.5的剪影v4.0库。 并且一直在尝试使用play specs2编写测试代码。 但是,我的测试类出现以下错误,如下所示 错误消息 [error] could not find implicit value for parameter env: com.mohiva.play.silhouette.api.Environment[utils.auth.DefaultEnv] .withAuthenticator[DefaultEnv](
[error] could not find implicit value for parameter env: com.mohiva.play.silhouette.api.Environment[utils.auth.DefaultEnv]
.withAuthenticator[DefaultEnv](identity.loginInfo)
^
这是考试班
package controllers
import com.google.inject.AbstractModule
import org.joda.time.DateTime
import org.specs2.specification.Scope
import org.specs2.matcher._
import org.specs2.mock._
import play.api.test._
import play.api.libs.json._
import play.api.libs.json.Json
import play.api.libs.json.Reads._
import play.api.libs.functional.syntax._
import play.api.libs.concurrent.Execution.Implicits._
import play.api.libs.mailer.{ MailerClient, Email }
import play.api.inject.guice.GuiceApplicationBuilder
import play.api.inject.bind
import com.mohiva.play.silhouette.test._
import com.mohiva.play.silhouette.api._
import com.mohiva.play.silhouette.api.repositories.AuthInfoRepository
import com.mohiva.play.silhouette.api.util._
import com.mohiva.play.silhouette.impl.providers._
import net.codingwell.scalaguice.ScalaModule
import utils.auth.DefaultEnv
class TestControllerSpec extends PlaySpecification with Mockito {
"case" in new Context {
new WithApplication(application) {
val request = FakeRequest(POST, "/api/test")
.withAuthenticator[DefaultEnv](identity.loginInfo) // <-
val result = route(app, request).get
status(result) must be equalTo OK
}
}
trait Context extends Scope {
val identity = User(
loginInfo = LoginInfo(..)
..
)
implicit val env = FakeEnvironment[DefaultEnv](Seq(identity.loginInfo -> identity))
class FakeModule extends AbstractModule with ScalaModule {
def configure() = {
bind[Environment[DefaultEnv]].toInstance(env)
}
}
lazy val application = new GuiceApplicationBuilder()
.overrides(new FakeModule)
.build
}
}
还有一些类似于这个类的测试类可以正确地编译和执行。
这是一种涉及范围的隐式问题。。
因此,我尝试将所有这些导入到另一个能够正确编译的测试类中。但是,仍然无法编译。
缺少某些导入?正如编译器所述,您缺少一个隐式值。使用以下内容,其建模依据为:
我认为这是解决这个问题的最后手段。但是,无论如何,要更快地解决它。无论如何,谢谢你的建议。
class TestControllerSpec extends PlaySpecification with Mockito {
"the POST request" should {
"return an OK response" in new Context {
new WithApplication(application) {
val identity = User(LoginInfo(...))
implicit val env = FakeEnvironment[DefaultEnv](Seq(identity.loginInfo -> identity))
val request = FakeRequest(POST, "/api/test")
.withAuthenticator(identity.loginInfo)
val result = route(app, request).get
status(result) must be equalTo OK
}
}
}
trait Context extends Scope {
...
}
}