Принятый ответ предполагает rack_session_access .Он работает, вставляя контроллеры промежуточного программного обеспечения для редактирования и обновления состояния сеанса, а затем заставляет капибару посещать эту страницу и отправлять форму с данными сеанса.Очень гениально!Но не нужно, если вы используете Warden (напрямую или через Devise).
Warden имеет хук on_next_request , который дает доступ к механизму warden, который можно использовать для непосредственной установки ключей сеанса.Я собрал это вместе, чтобы связать его в rspec:
Создать spec/support/inject_session.rb
:
module InjectSession
include Warden::Test::Helpers
def inject_session(hash)
Warden.on_next_request do |proxy|
hash.each do |key, value|
proxy.raw_session[key] = value
end
end
end
end
В spec/spec_helper.rb
включить модуль в спецификации функций:
RSpec.configure do |config|
config.include InjectSession, :type => :feature
end
Тогда пример использования в спецификации может быть:
inject_session :magic => 'pixie dust', :color => 'pink'
visit shopping_cart_path
page.should be_all_sparkly_and_pink # or whatever