ПОМЕСТИТЬ метод в playframework FunctionalTest

#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);