2015-11-19 15 views
5

にコントローラを注入だから2.4ドキュメント(https://playframework.com/documentation/2.4.x/ScalaTestingWithScalaTest#Unit-Testing-Controllers)を再生するようによれば、コントローラはこの再生/ Scalaは試験

ように動作するテストのために、この

trait ExampleController { 
    this: Controller => 

    def index() = Action { 
    Ok("ok") 
    } 
} 

object ExampleController extends Controller with ExampleController 

ような形質として設定されるべきです

class ExampleControllerSpec extends PlaySpec with Results { 

    class TestController() extends Controller with ExampleController 

    "Example Page#index" should { 
    "should be valid" in { 
     //test code 
    } 
    } 
} 

しかし、私は私のコントローラは、このようになりますGuiceの依存性注入を使用して、2.4ドキュメンテーション(https://playframework.com/documentation/2.4.x/ScalaDependencyInjection)を再生するために従っています:

@Singleton 
class ExampleController @Inject() (exampleService: IExampleService) extends Controller { 
    def index() = Action { 
     Ok("") 
    } 
} 

コントローラはもはや特性ではなく、私はこれを次のようなテストに混ぜることはできません:with ExampleController、上記のテストをどのようにして動作させるのですか?

答えて

3

ExampleControllerから直接継承できます。

class TestController(service: IExampleService) extends ExampleController(service) 

あなたはhere

+0

感謝を使用してプレイをテストし、Guiceの詳細情報を見つけることができます:あなたのコントローラがすでにこれは継承のようにしても、extends Controller排除することができます。ちなみに、どのように(同じコントローラに注入されている)サービスを同じテストにも注入する方法はありますか? – Caballero

+0

私はサービスを模倣したいと思います。例えば:ScalaMockを使用します。 – jazmit

+0

ExampleController命令をテストする代わりに、クラスTestControllerを作成してテストすることのメリットは何でしょうか? – gun