8

Ho iniziato a scrivere test funzionali per la mia app rails oggi. Io uso il plugin di autenticazione RESTful. Mi sono imbattuto in una coppia che confonde le cose spero che qualcuno possa chiarirmi.Test funzionali di Ruby on Rails con il plugin RESTful Authentication

1) Ho scritto una funzione di accesso rapido perché la maggior parte delle funzioni della mia app di rotaie richiedono l'autenticazione.

def login_as(user) 
    @request.session[:user_id] = user ? user.id : nil 
end 

Il problema che vedo con questa funzione è fondamentalmente falsi autenticazione. Dovrei essere preoccupato per questo? Forse va bene percorrere questa strada finché provo il vero metodo di autenticazione da qualche parte. O forse questa è una pratica terribile.

2) La seconda cosa confusa è che in alcuni punti dei miei test funzionali ho bisogno che avvenga il processo di autenticazione completo. Quando un utente è attivato, ho il metodo do_activate per creare alcuni oggetti iniziali per l'utente. È analogo alla creazione di un oggetto taccuino vuoto e di un oggetto penna per un'applicazione studente, se questo ha senso.

Quindi, per testare correttamente la mia applicazione, ho bisogno che l'utente tocchi lo stato di attivazione in modo da creare tali oggetti. Attualmente sto usando Factory Girl per creare l'utente, quindi chiamare la funzione login_as sopra per falsificare l'autenticazione.

Suppongo che un'altra opzione sia quella di saltare la sequenza di autenticazione completa e creare gli oggetti vuoti con Factory Girl. Potrei testare l'autenticazione corretta da qualche altra parte.

Cosa ne pensi? Se dovessi passare attraverso la sequenza corretta, perché il codice sottostante non sta invocando la funzione do_activate?

user = Factory.create(:user) 
user.active = 1 
user.save 

Grazie!

+0

[Ecco una domanda simile che ho chiesto] (http://stackoverflow.com/questions/64827/rails-restful-authentication-rspec-how-to-test-new-models-that-require-authen) e un mucchio di collegamenti che ho riunito. – srboisvert

risposta

7

Fake è perfettamente accettabile.

Tuttavia, scrivere altri test che garantiscano la protezione delle cose che si desidera proteggere. Quindi

test "it should show the profile page" do 
    user = Factory(:user) 
    login_as(user) 
    get :show, :id => user 
    assert_response :success 
end 

test "it should not show the profile page cos I'm not logged in" do 
    user = Factory(:user) 
    get :show, :id => user 
    assert_response :redirect 
end 

Sentitevi liberi di darmi un seguito per il followup!