2015-11-19 32 views
5

kontrolörü enjekte Böylece 2.4 belgeleri (https://playframework.com/documentation/2.4.x/ScalaTestingWithScalaTest#Unit-Testing-Controllers) Play göre, kontrol cihazı, buÇalma/Scala testi

gibi çalışması için bir test için, bu

trait ExampleController { 
    this: Controller => 

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

object ExampleController extends Controller with ExampleController 

gibi bir özellik olarak ayarlanabilir olmalıdır Ben Guice bağımlılık enjeksiyon kullanılarak ve 2.4 belgelerine Çal göre ediyorum ancak

class ExampleControllerSpec extends PlaySpec with Results { 

    class TestController() extends Controller with ExampleController 

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

, (https://playframework.com/documentation/2.4.x/ScalaDependencyInjection) benim denetleyicisi şöyle görünür:

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

Denetleyici artık bir özellik olmadığından ve bunu şu şekilde test edemediğimden: with ExampleController, testi yukarıda nasıl çalıştırırım?

cevap

3

Doğrudan ExampleController'den devralabilirsiniz.

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

Sen here

+0

Teşekkür kullanarak Çal test ve Guice hakkında daha fazla bilgi bulabilirsiniz: Denetleyiciniz zaten bu miras olarak da, extends Controller ortadan kaldırabilir. Bu arada, servisin (kontrolöre enjekte edilen) aynı teste nasıl enjekte edileceği hakkında herhangi bir fikrin var mı? – Caballero

+0

Hizmetin dışına çıkarım, örneğin: ScalaMock kullanarak. – jazmit

+0

Anladığım gibi, bir TestController sınıfı oluşturmanın ve test etmenin faydası ne olurdu? – gun