2016-08-30 3 views
3

Ich habe Probleme beim Testen eines Controllers, der eine POST-Anfrage an die API sendet. Ich habe es auf verschiedene Arten getestet, aber ich bekomme immer die gleiche "400" -Antwort. Ich glaube, dass das Format des Json Val korrekt ist, weil ich es mit Swagger getestet habe und es funktioniert gut. Kann mir jemand helfen zu verstehen, was ich hier vermisse? Danke vielmals.So testen Sie einen Controller in Play/Scala

val json: JsValue = Json.parse("""[{"id":"1","address":"my address"}]""") 
val mockAddressFinder = mock(classOf[AddressFinder]) 

"Example test" should { 
    "should be valid" in { 
    val controller = new Match(mockAddressFinder) 
    val results = controller.match.apply(FakeRequest(
    POST, 
     "test/test", 
     FakeHeaders(Seq("Content-type"->("application/json"))), 
    json 
    )) 
    results.onComplete { 
    case Success(_) => results.map(s => println("hello" + s.header.status)) 
    case _=> println("did not work") 
    } 
} 

Antwort

0

Ist eine Methode in der Steuerung übereinstimmen?

Ich denke, Sie sollten

controller.match()(FakeRequest....) 

controller.match() tun sollen, ein Action zurückkehren, das ist eine Funktion aus einer Anfrage zu einem Ergebnis. Zu dieser Funktion sollten Sie Ihre gefälschte Anfrage weitergeben.

+0

Willkommen bei Stack Overflow! [Beantworten] (http://stackoverflow.com/help/how-to-answer) kann Ihnen helfen, Antworten zu schreiben, die angenommen und aktualisiert werden. – zhon

+0

* danke * @zhon! – edo

3

können Sie dies versuchen. Das funktioniert bei mir.

val fakeRequest = FakeRequest(POST, "/someUrl", FakeHeaders(), AnyContentAsJson(Json.parse("""[{"id":"1","address":"my address"}]"""))) 
    val futureResult: Future[Result] = route(application, fakeRequest).get 
    val resultJson: JsValue = contentAsJson(futureResult)(Timeout(2, TimeUnit.SECONDS)) 
    resultJson.toString mustBe """{"status":"success"}""" 
Verwandte Themen