2010-04-08 2 views
7

Ok, also ich bin in ein sehr seltsames Problem geraten, direkt verbunden mit vor Blöcken. Ich mache einen Integrationstest über Watir und RSpec. Für einen einfachen Test, um zu überprüfen, ob Benutzer eine Anmeldung durchführen kann, erstelle ich einen 'Benutzer' Datensatz in der Datenbank mit Hilfe von Factory_Girl.RSpec: eingehende Unterschiede zwischen vor (: alle) und vorher (: jeweils)

Also habe ich den folgenden Code:

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

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

In do stuff ich einen Browser aufrufen und sehen, wie der Benutzer anmelden will. Leider kann er das irgendwie nicht - "Benutzername ist nicht gültig".

Nach einigen Untersuchungen entdeckte ich, dass, wenn ich den Code zum Erstellen von Benutzer in before(:all) Block, alles magisch funktioniert. Wie ist das? Was ist der Unterschied zwischen :all und :each in diesem Zusammenhang? Außerdem, wenn ich den Code zum Erstellen des Benutzers tatsächlich in den Testkörper legte, funktioniert es immer noch nicht (d. H. Der Benutzer wird irgendwie nicht zur Datenbank oder etwas hinzugefügt).

Antwort

3

Sie haben wahrscheinlich Transaktions Leuchten aktiviert, damit Ihr Watir Prozess nicht Datenbank-Änderungen innerhalb der Transaktion sehen, dass jedes RSpec Beispiel in gewickelt ist.

Versuchen Transaktionsfunktionen deaktiviert werden und so etwas wie database cleaner mit einem sauberen Schiefer erhalten vor jedem Beispiel.

Verwandte Themen