L'app My Rails 3.2 utilizza OmniAuth e Devise per accedere con Twitter. Il sistema di autenticazione funziona correttamente. Vorrei scrivere un test di integrazione in rspec per assicurarmi che tutto funzioni. Usando le informazioni nel wiki, ho scritto quanto segue, ma so che mi mancano le cose.Rails rspec e omniauth (test di integrazione)
Sotto test.rb in config/ambienti, ho le seguenti righe
OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:twitter] = {:provider => 'twitter', :uid => '123545'}
La mia prova rspec si presenta così:
describe "Authentications" do
context "without signing into app" do
it "twitter sign in button should lead to twitter authentication page" do
visit root_path
click_link "Sign in with Twitter"
Authentication.last.uid.should == '123545'
end
end
end
autenticazione è il nome del mio modello e chiamando .UID nella console di rails restituisce la stringa fine.
che sto ottenendo il seguente errore quando ho eseguito questo test:
Failure/Error: Authentication.last.uid.should == '123545'
NoMethodError:
undefined method `uid' for nil:NilClass
Qualcuno può aiutarmi a capire come utilizzare i mock OmniAuth che vengono forniti? Una spiegazione per perché e come funziona sarebbe apprezzato pure.
Ciao! Ho provato request.env ["omniauth.auth"], ma ottengo l'errore "env metodo non definito per la classe nil" – izumeroot
BTW, ecco la soluzione corretta https://gist.github.com/kinopyo/1338738 – izumeroot