Add values to Session during testing (FakeRequest,

2020-04-07 06:32发布

问题:

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?

回答1:

There is a pull request about this functionality

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



回答2:

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.