2010-04-08 11 views
7

Ok, me he encontrado con un problema muy extraño, conectado directamente con los bloques before. Estoy haciendo una prueba de integración a través de Watir y RSpec. Para una prueba simple para verificar si el usuario puede realizar un inicio de sesión, estoy creando un registro de 'usuario' en el archivo db por medio de factory_girl.RSpec: diferencias en profundidad entre before (: all) y before (: each)

por lo que poner el siguiente código:

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

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

En do stuff que llamo un navegador y ver cómo el usuario intenta iniciar sesión. Desafortunadamente, de alguna manera no puede hacer eso: "El nombre de usuario no es válido".

Después de un poco de investigación descubrí que si puse el código para crear usuario en el bloque before(:all), todo funciona mágicamente. ¿Como es que? ¿Cuál es la diferencia entre :all y :each en este contexto? Además, si coloco el código para crear al usuario realmente en el cuerpo de prueba, todavía no funciona (es decir, el usuario de alguna manera no se agrega al DB o algo así).

Respuesta

3

Probablemente han permitido a los accesorios de transacciones, por lo que su proceso de Watir no ve los cambios de base de datos dentro de la operación que cada ejemplo RSpec se envuelve en.

Intente desactivar características transaccionales y usar algo como database cleaner para obtener una pizarra limpia antes de cada ejemplo.

Cuestiones relacionadas