PlayFramework POSTのControllerテスト

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

PlayFrameworkのPOSTのControllerテストを作成する。

bodyはJSONではなく一般のkey=valueのフォームデータをPOSTした形式とする。

FakeRequest

FakeRequestはwithBodyを追記してbuildする。

bodyの内容はcontrollerで受け取るrequest.bodyと同等の形式を渡せばよい。

つまりMap[String, Seq[String]]の形式でパラメータを作成する。

また、下記の例ではwithCSRFTokenでCSRFトークンを加えている。

val request = FakeRequest(POST, "/form").withCSRFToken.withBody(
  Map("name"->Seq("v1"),"pass"->Seq("v2"),"radio"->Seq("v3")
)
Controllerの実行
val controller = new HomeController(stubMessagesControllerComponents())

で作成すると、

could not find implicit value for parameter mat: akka.stream.Materializer

とakkaのインスタンスを求められるので、routingからcontrollerを実行するようにした。

val request = FakeRequest(POST, "/form").withCSRFToken.withBody(
  Map("name"->Seq("v1"),"pass"->Seq("v2"),"radio"->Seq("v3")
)
val home = route( new GuiceApplicationBuilder().build(), request ).get
status(home) mustBe OK
テストメソッドサンプル
"データ送信のテスト" in {
  val request = FakeRequest(POST, "/form").withCSRFToken.withBody(
    Map("name"->Seq("v1"),"pass"->Seq("v2"),"radio"->Seq("v3")))
    val home = route( new GuiceApplicationBuilder().build(), request ).get
    status(home) mustBe OK
    contentType(home) mustBe Some("text/html")
    contentAsString(home) must include ("v1")
  }