/ / So testen Sie eine brandneue WSClient-Anforderung in Play - scala, playframework, playframework-2.5

So testen Sie eine WSClient-Anfrage in Play: scala, playframework, playframework-2.5

Grundlegende App-Architektur App-Architektur Mit Blick auf die Offizielle 2.5 WS-TestdokumentationEs geht nur darum, Antworten zu erhalten, die synchron sind.

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 Schritte testen möchte 4, 5 und 6 in meiner architektur? Kann ich WSTestClient verwenden? Die Dokumentation scheint nur spärlich zu sein

Hier ist der entsprechende Code, den ich teste

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)))}
}
}
)
}

Antworten:

0 für die Antwort № 1

Dies wurde durch eine Überarbeitung meiner Architektur gelöst.

Wirklich, ich habe versucht, Unit-Testmethoden mit Integrationstests zu verwenden.

Wenn Sie einen Controller testen möchten, für den a erforderlich ist WSClient Sie sollten Gerätetests durchführen und injizieren, wenn Sie den Controller instanziieren.

Im Grunde können Sie keine White-Box-Tests durchführen, während Sie versuchen, Black-Box-Tests durchzuführen.

Siehe die Play-Dokumentation auf ScalaTest und Controller testen

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