2016-08-04 25 views
0

Grundlegende App-Architektur App architecture Mit Blick auf die Official 2.5 WS Test Documentation spricht es nur über das Erhalten von Antworten, die synchron sind.So testen Sie eine FireConnection-WSClient-Anforderung in Play

object GitHubClientSpec extends Specification with NoTimeConversions { 

    "GitHubClient" should { 
    "get all repositories" in { 

     Server.withRouter() { 
     case GET(p"/repositories") => Action { 
      Results.Ok(Json.arr(Json.obj("full_name" -> "octocat/Hello-World"))) 
     } 
     } { implicit port => 
     WsTestClient.withClient { client => 
      val result = Await.result(
      new GitHubClient(client, "").repositories(), 10.seconds) 
      result must_== Seq("octocat/Hello-World") 
     } 
     } 
    } 
    } 
} 

Was passiert, wenn ich testen möchten Schritte 4, 5 und 6 in meiner Architektur? Kann ich WSTestClient verwenden? Dokumentation scheint spärlich zu sein auf es

Hier ist der entsprechende Code Ich versuche

def createGraphvizDotStringAndReturnImgurLink = Action.async{ implicit request => 
    import SlashCommandIn._ 

    slackForm.bindFromRequest.fold(
     formWithErrors => { 
      Logger.warn(s"Incorrect Form Format: ${request.body.asText.getOrElse("<No Body>")}}") 
      Future{Ok(Json.toJson(SlackPrivateUserResponse(BAD_FORM_DATA_MSG)))} 
     }, 

     goodValidatedSlackRequest => { 
      if(goodValidatedSlackRequest.token.contentEquals(SLACK_EXPECTED_TOKEN)) { 
       Logger.debug("Validation Succeeded") 
       _doImageCreationAndGetImgurLink(goodValidatedSlackRequest) // Steps, 4, 5, and 6 
       Future{Ok(Json.toJson(SlackPrivateUserResponse(PROCESSING_MSG + "\n>>>" + 
        goodValidatedSlackRequest.text)))} 

      }else { 
       Future{Ok(Json.toJson(SlackPrivateUserResponse(BAD_TOKEN_MSG)))} 
      } 
     } 
    ) 
} 

Antwort

0

diese meine Architektur durch Nacharbeiten gelöst zu testen.

Wirklich, ich versuchte Unit-Testmethoden mit Integrationstests zu verwenden.

Wenn Sie einen Controller testen möchten, der eine WSClient erfordert, sollten Sie Unit-Tests durchführen und diese beim Instanziieren des Controllers injizieren.

Grundsätzlich können Sie keine White-Box-Tests durchführen, während Sie versuchen, Blackbox-Tests durchzuführen.

Siehe die Play-Dokumentation auf ScalaTest und Test-Controller

import scala.concurrent.Future 

import org.scalatestplus.play._ 

import play.api.mvc._ 
import play.api.test._ 
import play.api.test.Helpers._ 

class ExampleControllerSpec extends PlaySpec with Results { 

    "Example Page#index" should { 
    "should be valid" in { 
     val controller = new ExampleController() 
     val result: Future[Result] = controller.index().apply(FakeRequest()) 
     val bodyText: String = contentAsString(result) 
     bodyText mustBe "ok" 
    } 
    } 
} 

Quelle: https://www.playframework.com/documentation/2.5.x/ScalaTestingWithScalaTest