2016-08-04 7 views
0

基本的なアプリケーションのアーキテクチャ App architecture Official 2.5 WS Test Documentationを見ると、同期的な応答しか得られないという話があります。私がテストしたい場合はどうなりますPlayでfire-and-forget WSClientリクエストをテストする方法

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

は私のアーキテクチャで4、5、および6ステップ? WSTestClientを使用できますか?ドキュメントはここに関連するコードだそれ

の希薄なように思わ私は

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

答えて

0

をテストしようとしている私のアーキテクチャを再加工することによってこれを解決しました。

本当に、私は統合テストでUnit testing methodologiesを使用しようとしていました。

WSClientが必要なコントローラをテストする場合は、ユニットテストを行い、コントローラをインスタンス化するときに注入する必要があります。

基本的に、ブラックボックステストを実行しようとしている間は、ホワイトボックステストを行うことはできません。 https://www.playframework.com/documentation/2.5.x/ScalaTestingWithScalaTest

ScalaTestとテストコントローラ

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

ソースのプレイのマニュアルを参照してください。

関連する問題