La risposta accettata suggerisce rack_session_access. Funziona inserendo controller middleware per modificare e aggiornare lo stato della sessione, quindi capybara visita quella pagina e invia un modulo con i dati della sessione. Molto geniale! Ma non è necessario se stai usando Warden (direttamente o tramite Devise).
Warden ha un gancio on_next_request che dà accesso al meccanismo di Warden, che può essere utilizzato per impostare direttamente le chiavi di sessione. Ho buttato questo insieme di riunire in su in rspec:
Creare 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
Nel spec/spec_helper.rb
includere il modulo in funzione specifiche:
RSpec.configure do |config|
config.include InjectSession, :type => :feature
end
Poi uso del campione in una specifica potrebbe essere:
inject_session :magic => 'pixie dust', :color => 'pink'
visit shopping_cart_path
page.should be_all_sparkly_and_pink # or whatever
In test di integrazione, è necessario registrare gli utenti dai moduli di accesso. – apneadiving
Non funzionerà. Il problema chiave è che sto usando un sistema di autenticazione esterno: Shopify.Quindi Shopify è configurato per restituire un accesso corretto a un URL specifico. Vedi il problema? Quell'URL non può essere localhost. Ecco perché ho bisogno di falsificare il log in corso, anche se sono in test di integrazione – Nerian