0
我有一個小型Play(2.1.2)應用程序,它試圖存儲一些數據並執行重定向。我有2種規格:使用Specs2播放FakeRequest請求跨測試請求
"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")
}
}
當運行這些測試中,第二測試具有相同的結果作爲第一個,所以一個SEE_OTHER
代替BAD_REQUEST
。當我改變測試的順序時,兩者都可以正常工作。第二個也通過,當我刪除第一個。
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")
)
我將我的控制器代碼,它似乎像'bindFromRequest'告訴我,雖然我已經指定了'nonEmptyText'爲'username'屬性的形式確定。 –
感謝您指點我再次檢查我的數據庫內容的方向,確實在此測試中缺少插入語句。爲什麼刪除另一個測試修復它仍然是一個謎,但它現在的作品! –