2015-12-03 4 views
0

Я пытаюсь перенести тесты с помощью FakeRequest на использование WithServer.Имитировать сеанс с использованием 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

Так что я нашел этот вопрос, который является относительно старым:

Add values to Session during testing (FakeRequest, FakeApplication)

Первый ответ на этот вопрос, кажется, был запрос тянуть, чтобы добавить .WithSession(...) к FakeRequest, но это не применимо в WS.url

Второй ответ, кажется, чтобы дать мне то, что мне нужно:

Создать печенье:

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 устарел

Смежные вопросы