/ / Comment tester une requête WSClient feu et oublier en jeu - analyse, playframework, playframework-2.5

Comment faire pour tester une demande WSClient feu-et-oublier dans Play - scala, playframework, playframework-2.5

Architecture de base de l'application Architecture de l'application En regardant le Documentation de test officielle 2.5 WS, il ne s'agit que d'obtenir des réponses synchrones.

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

Qu'est-ce qui se passe si je veux tester les étapes 4, 5 et 6 dans mon architecture? Puis-je utiliser WSTestClient? La documentation semble être rare

Voici le code que j’essaie de tester

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

Réponses:

0 pour la réponse № 1

Résolu ceci en retravaillant mon architecture.

Vraiment, j'essayais d'utiliser des méthodologies de tests unitaires avec des tests d'intégration.

Si vous souhaitez tester un contrôleur nécessitant une WSClient vous devriez faire des tests unitaires et l'injecter lors de l'instanciation du contrôleur.

En gros, vous ne pouvez pas faire de test de boîte blanche en essayant de réaliser un test de boîte noire.

Voir la documentation Play sur ScalaTest et tester les contrôleurs

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

la source: https://www.playframework.com/documentation/2.5.x/ScalaTestingWithScalaTest