2012-09-07 19 views
6

Mam wbudowany specyfikator kontrolera dla mojego modelu użytkownika i mija, chociaż wydaje mi się, że powinien zawieść. Spec jest poniżej:Testowanie kontrolera RSpec - "przypisuje" nieoczekiwane zachowanie

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 

Linia "spodziewać (przypisuje (: Użytkownicy)). Do EQ ([user])" przechodzi, ale czuję się jak powinna ona niepowodzeniem. W końcu stworzyłem dwóch użytkowników (user i other_user) na górze. Jasno nie rozumiem, co się dzieje, więc czy ktoś może to wyjaśnić?

Odpowiedz

7

let jest leniwy; nie utworzy użytkownika, dopóki nie zostanie wywołany po raz pierwszy (w którym to momencie wynik zostanie zapamiętany). Ponieważ wywołujesz user, ale nie other_user, tylko pierwszy użytkownik jest faktycznie tworzony i specyfikacja przechodzi.

Użyj let!, jeśli chcesz uzyskać gorącą ocenę lub upewnij się, że dzwonisz pod numer other_user.

RSpec Documentation

+0

Dziękuję bardzo za to! To doprowadzało mnie do szału. – Bryce

Powiązane problemy