使用WithServer模拟会话

时间:2015-12-03 19:20:57

标签: session playframework playframework-2.0

我正在尝试将测试从使用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(..)(这是否有意义?),但无济于事。

有什么想法吗? 感谢

1 个答案:

答案 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