2012-02-04 2 views
5

Sto provando ad avviare una nuova sessione utente creando un helper che POSTs una nuova sessione utente. Ecco quello che hoSpecifiche richieste RSpec/Capybara - Impossibile eseguire Devise su POST nuova sessione utente

def login(user) 
    post user_session_path, :login => user.username, :password => user.password 
end 

E per l'utente

user = Factory.create(:user) 

ho un test in RSpec che indirizza l'utente a una pagina che richiede l'autenticazione. Usando l'helper, mi aspetto che venga creata una nuova sessione utente. Tuttavia, eseguendo la specifica, mi sta dicendo che la pagina corrente è la schermata di accesso. Ciò indica che una nuova sessione utente non viene creata e che l'utente viene reindirizzato alla schermata di accesso quando accede alla risorsa con restrizioni senza sessione utente. Guardando i registri di test, questo è il caso.

Anche guardando i registri, si dice che l'azione POST non è autorizzata.

Started POST "/login" for 127.0.0.1 at 2012-02-04 13:34:59 -0800 
Processing by SessionsController#create as HTML 
Parameters: {"login"=>"foo12", "password"=>"[FILTERED]"} 
Completed 401 Unauthorized in 1ms 
Processing by SessionsController#new as HTML 
Parameters: {"login"=>"foo12", "password"=>"[FILTERED]"} 
Rendered devise/shared/_links.erb (1.4ms) 
Completed 200 OK in 15ms (Views: 12.7ms | ActiveRecord: 0.0ms) 

ho provato manualmente tramite la pagina di accesso tramite un browser ed è stato in grado di creare una sessione più che bene. Ho anche scritto un test con Capybara che visita la pagina di accesso, inserisce le credenziali dell'utente e invia. Questo crea una nuova sessione utente senza problemi.

+0

mi sono imbattuto in questo breve tempo, quando Ho provato a combinare queste 2 dichiarazioni in 1, per errore. Dovrebbero essere separati. 'config.before (: ciascuno) fare DatabaseCleaner.strategy =: operazione fine config.before (: ciascuno) fare DatabaseCleaner.start fine ' in ' config.before (: ogni) fare DatabaseCleaner.strategy =: operazione DatabaseCleaner.start fine ' – Ryan

risposta

27

ho avuto questo lavoro includendo Warden Helpers :: Test :: (che meditano l'uso dietro le quinte)

require 'spec_helper' 
include Warden::Test::Helpers 

describe "...Whatever..." do 

    before(:each) do 
    @user = Factory.create(:user) 
    login_as @user, :scope => :user 
    end 
    ... 

trovato la soluzione da qui: http://blog.joshmcarthur.com/2011/06/11/integration-tests-with-devise-and-rspec/

+0

funzionava. Grazie! – PetrolMan

+0

Ho lavorato anche con 'minitest' con me. Grazie! –

+0

ma ciò non verifica lo scenario di invio del modulo vero e proprio? – emaillenin