我正在尝试将测试从使用FakeRequest移植到使用WithServer。
为了使用FakeRequest模拟会话,可以按照此帖中的建议使用WithSession("key", "value")
:Testing controller with fake session
然而,当使用WithServer时,测试现在看起来像:
"render the users page" in WithServer {
val users = await(WS.url("http://localhost:" + port + "/users").get)
users.status must equalTo(OK)
users.body must contain("Users")
}
由于没有WithSession(..)
方法可用,我尝试了WithHeaders(..)
(这是否有意义?),但无济于事。
有什么想法吗? 感谢
答案 0 :(得分:0)
所以我发现了这个相对较老的问题:
Add values to Session during testing (FakeRequest, FakeApplication)
该问题的第一个答案似乎是将.WithSession(...)
添加到FakeRequest的拉取请求,但它不适用于WS.url
第二个答案似乎给了我所需要的东西:
创建cookie:
val sessionCookie = Session.encodeAsCookie(Session(Map("key" -> "value")))
创建并执行请求:
val users = await(WS.url("http://localhost:" + port + "/users")
.withHeaders(play.api.http.HeaderNames.COOKIE -> Cookies.encodeCookieHeader(Seq(sessionCookie))).get())
users.status must equalTo(OK)
users.body must contain("Users")
最后,断言将正确传递,而不是将我重定向到登录页面
注意:我使用的是Play 2.4,因此我使用Cookies.encodeCookieHeader,因为不推荐使用Cookies.encode