2010-04-08 17 views
7

Ok, quindi mi sono imbattuto in un problema molto strano, direttamente collegato ai blocchi precedenti. Sto facendo un test di integrazione tramite Watir e RSpec. Per un semplice test per verificare se l'utente può eseguire un login sto creando un record "utente" nel db tramite factory_girl.RSpec: differenze approfondite tra before (: all) e before (: each)

così ho messo il seguente codice:

before(:each) do 
    @user = Factory(:user) 
end 

if "should perform a login" do 
    # do stuff 
end 

In do stuff io chiamo un browser e vedere come l'utente tenta di accedere. Sfortunatamente, in qualche modo non può farlo - "Username non è valido".

Dopo alcune indagini ho scoperto che se inserisco il codice per la creazione di utenti nel blocco before(:all), , tutto funziona magicamente. Com'è quello? In questo contesto, qual è la differenza tra :all e :each? Inoltre, se inserisco il codice per la creazione dell'utente nel corpo del test, non funziona ancora (ad esempio, l'utente in qualche modo non viene aggiunto al DB o qualcosa del genere).

risposta

3

Probabilmente avete infissi transazionali abilitato, in tal modo il processo di Watir non vedere i cambiamenti del database all'interno della transazione che ogni esempio RSpec è avvolto in.

Prova a disabilitare funzionalità transazionali e usare qualcosa come database cleaner per ottenere una lavagna pulita prima di ogni esempio.

Problemi correlati