2

機能テストで CSRF トークンを取得するにはどうすればよいですか? セッションにトークンを保存し、それを URL で送信することはできません。

"The `send` action" should {
  "return status code 400 if subject is invalid" in new WithApp with Context {
    val token = CSRF.Token(42.toString)
    val Some(result) = route(FakeRequest(POST, helper.CSRF(routes.ContactUs.send())(token).toString())
      .withFormUrlEncodedBody(
        ("subject" -> "invalid"),
        ("name" -> "Lucky Luke"),
        ("email" -> "test@test.com"),
        ("message" -> "test")
      )
      .withSession(TOKEN_NAME -> token.toString)
    )

    status(result) must equalTo(BAD_REQUEST)
    contentType(result) must beSome("application/json")
    charset(result) must beSome("utf-8")
}

編集

token.toStringトークンを文字列として返しません。アクセサーtoken.valueは、セッションで送信できる適切なトークンを返します。したがって、実際の例は次のとおりです。

"The `send` action" should {
  "return status code 400 if subject is invalid" in new WithApp with Context {
    val token = CSRF.Token(42.toString)
    val Some(result) = route(FakeRequest(POST, helper.CSRF(routes.ContactUs.send())(token).toString())
      .withFormUrlEncodedBody(
        ("subject" -> "invalid"),
        ("name" -> "Lucky Luke"),
        ("email" -> "test@test.com"),
        ("message" -> "test")
      )
      .withSession(TOKEN_NAME -> token.value)
    )

    status(result) must equalTo(BAD_REQUEST)
    contentType(result) must beSome("application/json")
    charset(result) must beSome("utf-8")
}
4

1 に答える 1