HTTP-контекст для тестирования в Java Play! 2.0.2

Мы пытаемся написать тесты для наших представлений, но для правильного отображения некоторых из них требуются переменные сеанса. Вот как выглядит стандартный тест:

@Test
public void indexTest() {
    running(fakeApplication(), new Runnable() {
        public void run() {
            Content html = views.html.index.render(loginForm);
            assertThat(contentType(html)).isEqualTo("text/html");
            assertThat(contentAsString(html)).contains("log in");
        }
    });
}

loginForm — это фиктивная форма, которую мы объявили в тестовом классе.

Однако, когда мы пытаемся запустить этот тест, мы получаем следующую ошибку:

«Отсюда нет доступного HTTP-контекста»

Мы пытались использовать testServer и пытались получить контекст http из запросов к этому серверу, но безрезультатно.

Спасибо :-)

Изменить @nico_ekito

Это код, окружающий мою форму входа:

Form<Login> loginForm = Controller.form(Login.class);

Однако я считаю, что проблема заключается в вызываемом контроллере, поскольку представление не использует никаких свойств сеанса. Однако метод аутентификации () (в контроллере, который отображается, когда форма отправляется в представление), однако, использует сеансы.


person nicohvi    schedule 04.07.2012    source источник
comment
Вы запускаете тесты из командной строки? Я знаю, что могут быть проблемы, если вы запускаете тесты из eclipse.   -  person maialithar    schedule 04.07.2012
comment
Да, мы запускаем «тест игры» в терминале.   -  person nicohvi    schedule 04.07.2012
comment
Пожалуйста, покажите код вашего макета loginForm.   -  person ndeverge    schedule 05.07.2012
comment
Почему вы используете сеанс в своих представлениях? вы должны получить свои переменные сеанса в своем контроллере и явно передать их в представление, используя параметры, нет?   -  person ndeverge    schedule 05.07.2012
comment
Как я сказал в комментарии, мы не используем сеанс в представлениях (поскольку представление не использует никаких свойств сеанса).   -  person nicohvi    schedule 05.07.2012


Ответы (1)


Было бы полезно, если бы вы опубликовали все представление, потому что вы можете использовать плагин аутентификации/плагин i18n или что-то подобное, которое, в свою очередь, использует свойства сеанса. Вы также можете попробовать смоделировать контекст с помощью Mocktio или аналогичного перед запуском теста.

Context.current.set(
        new Context(mock(Request.class), 
                    new HashMap<String, String>(),  
                    new HashMap<String, String>()));

Я бы порекомендовал еще раз просмотреть ваши представления, проверив свойства сеанса.

person col    schedule 01.05.2013