Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 找不到参数env:com.mohiva.play.screet.api.Environment[utils.auth.DefaultEnv]的隐式值_Scala_Playframework_Silhouette - Fatal编程技术网

Scala 找不到参数env:com.mohiva.play.screet.api.Environment[utils.auth.DefaultEnv]的隐式值

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](

我使用的是带有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](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 {
    ...
  }
}