Я использую Rails 3.1.0.rc4, и я работаю над выполнением интеграционных тестов с помощью новых стильных DSL и Rspec (с использованием аутентификации) capybara
Проблема, с которой я столкнулась, заключается в том, что когда я запускаю интеграционный тест, драйвер стойки-драйвера из capybara, похоже, просто полностью потерял пользователя, зарегистрированного в сеансе, на самом деле сеанс, похоже, полностью очищается.
После нескольких дней отладки у меня есть полная потеря относительно того, почему. Идя по линии через стек промежуточного программного обеспечения, я считаю, что я решил проблему в том, что происходит в ActiveRecord::SessionStore
, которая вызывает это. Я прочитал здесь, что Rails очистит сеанс, если он не сможет проверить токен CSRF, что оставляет мне поверить, что у меня что-то настроено неправильно, и по какой-то причине этот один тест не аутентифицирует маркер CSRF правильно.
Это то, что находится в моем session_store.rb в каталоге /initializers:
MyApp::Application.config.session_store :active_record_store
Кто-нибудь, кто знает о защите CSRF в рельсах, имеет какие-либо причины, почему это может произойти?
Также обратите внимание на некоторые вещи:
- вещь, которую я пытаюсь протестировать, действительно работает в самом браузере, только этот один тест отбрасывает сеанс
- сеанс, похоже, упадет после отправки формы, к которой URL-адрес действия относится к другому серверу. Я использую камень видеомагнитофона для захвата запросов/ответов на этот внешний сервер в тесте, и, хотя я считаю, что я нарушил внешний запрос как проблему, это может иметь что-то непосредственно с токеном CSRF, не аутентифицирующим, тем самым очистив сеанс.
- другие тесты, связанные с входом в/сеанс сеанса, не выводят сеансы
Может ли кто-нибудь дать мне какие-либо указания относительно того, что здесь происходит, и почему один тест просто, кажется, произвольно отбрасывает сессию и терпит неудачу? Я сделал много отладки и попробовал все, о чем я могу думать.