#playframework
#playframework
Вопрос:
Я написал небольшое приложение, используя GAE и playframework.
Я пытаюсь протестировать метод PUT (используемый для обновлений), и при вызове из FunctionalTest он всегда возвращается со страницей входа, даже если я захожу в систему в начале теста, что может быть подтверждено тем, что все остальные методы работают нормально.
Похоже, что при использовании метода PUT сеанс теряется
У кого-нибудь были подобные проблемы?
Я использую play 1.1.1
Комментарии:
1. Привет, нам нужно немного больше деталей: какой код вы используете для вызова put, запись ваших маршрутов, реализация метода, работает ли put вне тестов и т.д. Пожалуйста, предоставьте как можно больше информации 🙂
2. Вы тестируете на своем локальном хостинге или на развернутом GAE? Вы улавливаете какую-либо разницу между ними? Я знаю, что GAE не поддерживает многие функции Play core, и мне интересно, является ли это одной из этих функций
Ответ №1:
Похоже, что в FunctionalTest есть ошибка. Во всех методах (POST, GET, DELETE) есть следующая строка, которая переносит файлы cookie
if (savedCookies != null) request.cookies = savedCookies;
Эта строка отсутствует в PUT. Кроме того, поскольку savedCookies является закрытым, вы не можете получить к нему доступ в своих тестах.
Обходной путь заключается в том, чтобы определить карту cookies в вашем тесте как закрытую переменную, установить для нее значение cookies ответа на вход, а затем вызвать POST с новым запросом, используя эти cookies.
Вот мой код
private static Map<String, Http.Cookie> lastCookies;
public void login(){
String postUrl = Router.reverse("GAEActions.doLogin").url;
Map<String, String> map = Maps.newHashMap();
map.put("email", "as@gmail.com");
map.put("url", "/");
map.put("isAdmin", "true");
Map<String, File> fileMap = Maps.newHashMap();
Response post = POST(postUrl, map, fileMap);
lastCookies = post.cookies;
}
public void test(){
....
Request request = newRequest();
request.cookies = lastCookies;
Response post = PUT(request, url,"application/json",json);