2011-10-15 19 views
9

Sto usando devise configurato per utilizzare l'integrazione di segno di omniauth su Facebook. Quando si chiama il metodo sign_in dai miei spec/request test ottengo:Test di integrazione con rspec e devise sign_in env

undefined method `env' for nil:NilClass 

spec:

describe FacebookController do 
    include Devise::TestHelpers 

    it "should display facebook logged in status" do 
    @user = User.create(:id => "123", :token => "token") 
    sign_in @user 
    visit facebook_path 
    end 
end 
+0

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)) –

risposta

7

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.

Problemi correlati