2017-09-26 7 views
0

私は、プレイフレームワーク2.5でSilhouette v4.0ライブラリを使用しています。 そして、play specs2を使用してテストコードを書き込もうとしています。 しかし、私は以下のように私のテストクラスで次のエラーが発生します。パラメータenvの暗黙の値が見つかりませんでした。com.mohiva.play.silhouette.api.Environment [utils.auth.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 
    } 
} 

だ適切にコンパイルして実行することができます。 これはスコープに関する暗黙的な問題です。 したがって、正しくコンパイルできる別のテストクラスと同じものをすべてインポートしようとしました。しかし、まだコンパイルすることはできません。 一部のインポートがありませんか?

答えて

1

コンパイラが示すように、暗黙の値がありません。 one of Silhouette's specsの後にモデル化された以下を使用してください:

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 { 
    ... 
    } 
} 
+0

この問題を解決するには最後の手段だと思います。しかし、とにかくそれを解決するのが速くなります。とにかくアドバイスをいただきありがとうございます。 – Gianfrance

関連する問題