Rails - Проигрыш сеанса с тестами интеграции и Capybara - связан с CSRF?

Я Я использую Rails 3.1.0.rc4, и я работаю над интеграционными тестами с новыми Steak-подобными DSL и Rspec от capybara (с использованием аутентификации Devise)

Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю интеграционный тест, Драйвер-тестер от Capybara кажется просто полностью потерять сеанс пользователя, вошедшего в систему, фактически, сеанс, кажется, просто полностью очищается.

После нескольких дней отладки я совершенно не понимаю, почему. Пройдя построчно через стек промежуточного программного обеспечения, я полагаю, что я решил, что проблема сводится к тому, что происходит в ActiveRecord :: SessionStore , что вызывает это. Я прочитал здесь , что Rails очистит сеанс, если он не может проверить токен CSRF, что заставляет меня думать, что у меня что-то настроено неправильно, и по какой-то причине этот тест является некорректная аутентификация токена CSRF.

Это то, что находится в моем session_store.rb в каталоге / initializers:

MyApp::Application.config.session_store :active_record_store

Кто-нибудь, кто знает о защите CSRF в рельсах, может узнать, почему это может происходить?

Кроме того, вот некоторые вещи, на которые следует обратить внимание:

  • то, что я пытаюсь протестировать, действительно работает в самом браузере, только этот тест отбрасывает сеанс
  • сеанс, кажется, прерывается после отправки формы, для которой URL-адрес действия относится к другому серверу. Я использую гем VCR для захвата запросов / ответов к этому внешнему серверу в тесте, и хотя я считаю, что я исключил внешний запрос как проблему, это может иметь прямое отношение к тому, что токен CSRF не аутентифицируется, таким образом очищая сеанс.
  • другие тесты, включающие вход / использование сеансов, не отбрасывают сеансы

Может ли кто-нибудь дать мне какие-либо сведения о том, что именно здесь происходит, и почему один тест, кажется, просто произвольно отбрасывает свои сеанс и не справиться со мной? Я провел много отладки и перепробовал все, что мог придумать.

14
задан Community 23 May 2017 в 12:13
поделиться