2015-11-19 9 views
5

So nach 2.4 Dokumentation spielen (https://playframework.com/documentation/2.4.x/ScalaTestingWithScalaTest#Unit-Testing-Controllers), sollte der Regler als Merkmal wie diese für einen TestPlay/Scala Regler in den Test Injektion

trait ExampleController { 
    this: Controller => 

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

object ExampleController extends Controller with ExampleController 

um einzurichtenden wie diese

zu arbeiten
class ExampleControllerSpec extends PlaySpec with Results { 

    class TestController() extends Controller with ExampleController 

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

aber ich Guice Dependency Injection mit, und nach 2.4 Dokumentation spielen (https://playframework.com/documentation/2.4.x/ScalaDependencyInjection) mein Controller sieht wie folgt aus:

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

Da Controller ist nicht mehr ein Merkmal und ich kann es nicht in den Test wie folgt mischen: with ExampleController, wie mache ich den obigen Test funktionieren?

Antwort

3

Sie können direkt von ExampleController erben. Sie können auch die extends Controller beseitigen, da der Controller bereits erbt diese:

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

Sie weitere Informationen über Tests mit Spielen und Guice here

+0

Dank finden. Übrigens, jede Idee, wie der Service (der in den Controller eingespeist wird) in den gleichen Test injiziert wird? – Caballero

+0

Ich würde den Service ausspionieren, zB: mit ScalaMock. – jazmit

+0

Ich verstehe nicht, was wäre der Vorteil, eine Klasse TestController zu erstellen und zu testen, anstatt den ExampleController direkt zu testen? – gun