У нас есть приложение Rails, только что обновленное до Rails3, использующее гем Devise Rails3 для аутентификации.Мы использовали Capybara с бэкэндом Celerity для тестирования некоторых страниц.
При доступе к приложению в браузере Devise отвечает перенаправлением на страницу входа, когда пользователь пытается получить доступ к защищенной странице /controller.
В версии Devise для Rails 2.x это работало, даже если входящий запрос имел пустой заголовок принятия */*
.
В версии Rails 3 Devise отвечает:простая текстовая строка, когда заголовок accept пуст.
Причина, по которой значение пустого заголовка accept имеет значение, заключается в том, что мы используем серверную часть Celerity Capybara для тестирования некоторых страниц, и, очевидно, Celerity отправляет пустое подтверждениезаголовок, и, следовательно, не перенаправляется Devise.Это поведение изменилось с Devise для Rails 2.x на Devise для Rails 3.
Сбой Celerity с UnexpectedPageException, и журнал сервера сообщает, что запрос был сделан с */*
в качестве заголовка принятия.
При использовании серверной части Selenium / Webdriver в одном и том же наборе тестов проблема исчезает.
Существует два способа решения этой проблемы:
- Скажите Devise, чтобы он как-то всегда предполагалtext / html как принять заголовок и ответить соответственно.Как это могло быть сделано?Нужно ли переопределять контроллеры?
- «Исправить» Celerity для отправки текста / html в качестве принимающего заголовка.Как это можно сделать?
- Это проблема / ошибка HTMLUnit?
Для меня # 2 выглядит «правильным» способом исправить это, но я не уверенесли отсутствие принятия заголовка Celerity / HTMLUnit является ошибкой или функцией.Мысли?