2012-09-07 28 views
6

He creado una especificación de controlador para mi modelo de usuario, y se aprueba, aunque creo que debería fallar. La especificación es el siguiente:Prueba de controlador RSpec - "asigna" comportarse inesperadamente

describe UsersController do 
    include Devise::TestHelpers 

    let (:user) do 
    FactoryGirl.create(:user) 
    end 
    let (:other_user) do 
    FactoryGirl.create(:user) 
    end 

    before :each do 
    @request.env["devise.mapping"] = Devise.mappings[:user] 
    sign_in user 
    end 

    describe "#index" do 
    it "can GET 'index'" do 
     get :index 
     response.should be_success 
    end 

    it "populates a list of users" do 
     get :index 
     expect(assigns(:users)).to eq([user]) 
    end 
    end 
end 

la línea de "esperar (cesionarios (usuarios):). A eq ([usuario])" pasa, pero me siento como debería fallar. Después de todo, he creado dos usuarios (usuario y otro_usuario) en la parte superior. Estoy claramente entendiendo mal lo que está pasando, entonces alguien puede explicarlo?

Respuesta

7

let es flojo; no creará el usuario hasta la primera vez que se llame (momento en el que se memora el resultado). Como llama al user pero no al other_user, solo se crea realmente el primer usuario y se pasa la especificación.

Utilice let! si desea una evaluación entusiasta o asegúrese de llamar al other_user en algún lado.

RSpec Documentation

+0

¡Muchas gracias por eso! Me estaba volviendo loco. – Bryce

Cuestiones relacionadas