2010-03-09 10 views
5

Wie können Datenbankansichten in Rspec getestet werden? Jedes Szenario ist in eine Transaktion eingebunden und die Daten sehen nicht so aus, als wären sie in der Datenbank gespeichert (MySQL in meinem Fall). Meine Sicht kehrt mit einer leeren Ergebnismenge zurück, da keiner der Datensätze in der Transaktion beibehalten wird. Ich bestätige, dass die Datensätze nicht gespeichert werden, indem ich einen Debug-Punkt in meiner Spezifikation festlege und meine Daten mit einem Datenbank-Client überprüfe, während die Spezifikation debuggt wird.Rspec> Testen der Datenbankansichten

Der einzige Weg, wie ich denken kann, dass meine Ansicht funktioniert, wäre, wenn ich die Transaktion vor dem Ende des Szenarios festschreiben und dann die Datenbank löschen könnte, nachdem das Szenario abgeschlossen ist. Weiß jemand, wie man das erreicht oder gibt es einen besseren Weg?

Danke

Antwort

2

Ich denke, ich habe es. Um keine Transaktionen zu verwenden, müssen Sie angeben:

self.use_transactional_fixtures = false 

Sie müssen auch sicher sein, zu bereinigen, was Sie nach jedem Szenario erstellen.

describe Attendee do 
    self.use_transactional_fixtures = false 

    def clear_all 
    ActiveRecord::Base.connection.execute('delete from users') 
    ActiveRecord::Base.connection.execute('delete from contact_info') 
    ActiveRecord::Base.connection.execute('delete from events') 
    end 

    before(:each) do 
    # create some test users 
    @event = Factory.create(:event) 
    @event.publish! 
    @user = Factory.create(:user) 
    @user_2 = Factory.create(:user_2) 
    end 

    after(:each) do 
    clear_all 
    end 

    it "should list have attendees in the directory" do 
    # in my case, Attendee class uses my attendees database view 
    Attendee.count.should be 2 
    end 
end