2015-11-19 16 views
5

Quindi, secondo Gioca 2.4 documentazione (https://playframework.com/documentation/2.4.x/ScalaTestingWithScalaTest#Unit-Testing-Controllers), il regolatore deve essere impostato come un tratto come questoPlay/Scala iniezione controller nella prova

trait ExampleController { 
    this: Controller => 

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

object ExampleController extends Controller with ExampleController 

in ordine per un test per lavorare in questo modo

class ExampleControllerSpec extends PlaySpec with Results { 

    class TestController() extends Controller with ExampleController 

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

però, sto usando l'iniezione di dipendenza Guice, e secondo Gioca 2.4 documentazione (https://playframework.com/documentation/2.4.x/ScalaDependencyInjection) il mio controller si presenta così:

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

Poiché il controller non è più un tratto e non riesco a mescolarlo nel test in questo modo: with ExampleController, come si esegue il test di cui sopra?

risposta

3

È possibile ereditare direttamente da ExampleController. È inoltre possibile eliminare il extends Controller, come il controller eredita già presente:

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

è possibile trovare ulteriori informazioni sul test utilizzando Play e Guice here

+0

Grazie. A proposito, qualche idea su come iniettare il servizio (che viene iniettato nel controller) nello stesso test? – Caballero

+0

Mi piacerebbe prendere in giro il servizio, ad esempio: utilizzando ScalaMock. – jazmit

+0

Non capisco, quale sarebbe il vantaggio di creare una classe TestController e testarla, invece di testare DirectController? – gun

Problemi correlati