Architecture de base 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 № 1Ré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