2010-03-09 20 views
5

Jak można przetestować widoki bazy danych w Rspec? Każdy scenariusz jest zawarty w transakcji, a dane nie wyglądają tak, jakby były przechowywane w bazie danych (MySQL w moim przypadku). Mój widok zwraca z pustym zestawem wyników, ponieważ żaden z rekordów nie jest zachowywany w transakcji. Sprawdzam, czy rekordy nie są przechowywane przez ustawienie punktu debugowania w mojej specyfikacji i sprawdzanie moich danych za pomocą klienta bazy danych podczas debugowania specyfikacji.Rspec> testowanie widoków bazy danych

Jedyny sposób, w jaki mogę pomyśleć o tym, że mój widok działa, byłby możliwy, gdybym mógł zatwierdzić transakcję przed końcem scenariusza, a następnie wyczyścić bazę danych po zakończeniu scenariusza. Czy ktoś wie, jak to osiągnąć lub czy istnieje lepszy sposób?

Dzięki

Odpowiedz

2

Myślę, że dostałem to. Aby nie używać transakcji, musisz określić:

self.use_transactional_fixtures = false 

Musisz także upewnić się, że po każdym scenariuszu oczyścisz to, co tworzysz.

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