il codice sia molto come il mio - Stavo cercando di utilizzare le funzioni Devise TestHelper Capybara e, e si scopre che non è possibile, per https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara. Il modo consigliato per farlo è spiegato su quella pagina, e ha funzionato per me.
Per essere chiari, ecco quello che ho fatto - in spec_helper.rb
:
RSpec.configure do |config|
config.include Warden::Test::Helpers
end
Warden.test_mode!
E nel mio codice, semplicemente - logout :user
.
Ecco il motivo per cui, secondo il wiki Devise, non è possibile utilizzare sign_out
:
Se vi state chiedendo il motivo per cui non possiamo semplicemente usare costruito in metodi sign_in e sign_out, è perché questi richiedono l'accesso diretto di Devise all'oggetto richiesta che non è disponibile durante l'utilizzo di Capybara. Per unire le funzionalità di entrambi i metodi è possibile creare un metodo di supporto.
che, approssimativamente, significa che mentre con, per esempio, MiniTest
, viene aggiunto un oggetto che rappresenta la richiesta (@request
) come variabile di istanza alla classe test case, che non avviene con Capybara. Non ho guardato il codice per conoscere i dettagli più esattamente, ma fondamentalmente, Warden si aspetta di trovare questo oggetto per poi accedere al negozio di biscotti dove sono le credenziali di accesso. Con Capybara/RSpec, mi aspetto che questo non stia accadendo.
Ecco una soluzione di devise github wiki che funziona nel test del controller per me [https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4 - (e-RSpec)] (https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4- (e-RSpec)) –