Add values to Session during testing (FakeRequest,

2020-04-07 06:33发布

I'm trying to build some tests around a method that reads some data from the session.

I tried extending FakeRequest and overriding the session value, but I get an error on compilation saying that session has to be a val when overriden, which won't work.

How can I modify a FakeRequest() to add values to the session?

2条回答
够拽才男人
2楼-- · 2020-04-07 07:10

There is a pull request about this functionality

See https://github.com/playframework/Play20/pull/103

查看更多
三岁会撩人
3楼-- · 2020-04-07 07:10

I used some examples from the pull request to build this in without using an updated version of play:

Create cookie:

val sessionCookie = Session.encodeAsCookie(Session(Map("key" -> "value")))

Create and execute fakeRequest:

val Some(result) = routeAndCall(FakeRequest(GET,"/").withHeaders(play.api.http.HeaderNames.COOKIE -> Cookies.encode(Seq(sessionCookie))))

Then to get stuff out I created the following:

Given the existing style of test methods:

status(result) must equalTo(OK)

I made:

def sessionCookie(result: Result): Option[Cookie] = cookies(result).get("PLAY_SESSION")
def session(result: Result): Session = Session.decodeFromCookie(sessionCookie(result))

Which you call:

  session(result).get("key") must be("value")

Have to say this is not tested in anger. But see if it helps.

查看更多
登录 后发表回答