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") }
リンク
リンク