2010-03-09 15 views
5

¿Cómo se pueden probar las vistas de la base de datos en Rspec? Cada escenario está envuelto en una transacción y los datos no parecen persistir en la base de datos (MySQL en mi caso). Mi vista regresa con un conjunto de resultados vacío porque ninguno de los registros se conserva en la transacción. Estoy validando que los registros no se almacenan estableciendo un punto de depuración en mi especificación y comprobando mis datos con un cliente de base de datos mientras se depuran las especificaciones.Rspec> probar las vistas de la base de datos

La única forma en que puedo pensar que funcione mi vista sería si pudiera comprometer la transacción antes del final del escenario y luego borrar la base de datos después de que se complete el escenario. ¿Alguien sabe cómo lograr esto o hay una mejor manera?

Gracias

Respuesta

2

Creo que lo tengo. Para no usar transacciones, debe especificar:

self.use_transactional_fixtures = false 

También debe asegurarse de limpiar lo que crea después de cada escenario.

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 
Cuestiones relacionadas