2010-03-09 3 views
5

Comment les vues de base de données peuvent-elles être testées dans Rspec? Chaque scénario est enveloppé dans une transaction et les données n'ont pas l'air d'être persistantes dans la base de données (MySQL dans mon cas). Ma vue renvoie un jeu de résultats vide car aucun des enregistrements n'est conservé dans la transaction. Je valide que les enregistrements ne sont pas stockés en définissant un point de débogage dans mes spécifications et en vérifiant mes données avec un client de base de données pendant que la spécification est en cours de débogage. La seule façon que je peux penser pour avoir mon travail de vue serait si je pourrais commettre la transaction avant la fin du scénario et puis effacer la base de données après que le scénario soit terminé. Est-ce que quelqu'un sait comment accomplir ceci ou y a-t-il un meilleur moyen?Rspec> tester les vues de base de données

Merci

Répondre

2

Je pense que je l'ai compris. Afin de ne pas utiliser de transactions, vous devez spécifier:

self.use_transactional_fixtures = false 

Vous devez également être sûr de nettoyer ce que vous créez après chaque scénario.

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 
Questions connexes