0

一部のデータを保存してリダイレクトを実行しようとする小さな Play (2.1.2) アプリケーションがあります。私は2つの仕様を持っています:

"save the user" in {
  running(FakeApplication()) {
    val Some(create) = route(
      FakeRequest(PUT, "/users")
        .withSession(("user-id", user_id))
        .withFormUrlEncodedBody(("username", any_username))
    )

    status(create) must equalTo(SEE_OTHER)
    redirectLocation(create).map(_ must equalTo("/profile")) getOrElse failure("missing redirect location")
  }
}

"display errors with missing username" in {
  running(FakeApplication()) {
    val Some(create) = route(
      FakeRequest(PUT, "/users")
        .withSession(("user-id", user_id))
    )

    status(create) must equalTo(BAD_REQUEST)
    contentAsString(create) must contain ("This field is required")
  }
}

これらのテストを実行すると、2 番目のテストは最初のテストと同じ結果になるためSEE_OTHERBAD_REQUEST. テストの順序を変更すると、両方とも正常に動作します。最初のものを削除すると、2番目のものも通過します。

Scala / Play / Specs2 は何らかの形でテストやリクエストの状態を記憶していますか? 確実に分離して実行するために必要なことはありますか?

編集:

私のコントローラーのコードは次のようになります。

val form: Form[User] = Form(
  mapping(
    "username" -> nonEmptyText
  )(user => User(username))(user=> Some(user.username))
)

form.bindFromRequest.fold(
  errors => BadRequest(views.html.signup(errors)),
  user => Redirect("/profile")
)
4

1 に答える 1

1

Playframework 2/Specs2 は、テスト クラス、アプリケーション、またはデータを保持する外部の場所で状態を保持しない限り、テスト間で状態を保持しません。

たとえば、アプリケーションがあるテストでユーザーをデータベースに保存し、別のテストでそのユーザーの存在をテストする場合、もちろん、テストが互いに干渉します。

したがって、各テスト間でデータを保持するデータベースをクリーンアップする方法を見つける必要があると思います。

于 2013-08-04T10:50:29.697 に答える