2012-09-07 23 views
6

Tôi đã xây dựng một thông số bộ điều khiển cho mô hình người dùng của mình và nó đi qua, mặc dù tôi cảm thấy nó không thành công. Thông số kỹ thuật bên dưới:Kiểm tra bộ điều khiển RSpec - "gán" hoạt động bất ngờ

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 

Dòng "expect (assigns (: users)). To eq ([user])" pass, nhưng tôi cảm thấy không thành công. Xét cho cùng, tôi đã tạo hai người dùng (người dùng và người dùng khác) ở trên cùng. Tôi hiểu rõ những gì đang xảy ra, vì vậy ai đó có thể giải thích nó?

Trả lời

7

let lười; nó sẽ không tạo người dùng cho đến lần đầu tiên nó được gọi (tại thời điểm đó kết quả được ghi nhớ). Vì bạn gọi user nhưng không phải là other_user, chỉ người dùng đầu tiên thực sự được tạo và thông số kỹ thuật mới vượt qua.

Sử dụng let! nếu bạn muốn đánh giá mong muốn hoặc đảm bảo bạn gọi other_user ở đâu đó.

RSpec Documentation

+0

Cảm ơn bạn rất nhiều vì điều đó! Nó khiến tôi phát điên. – Bryce

Các vấn đề liên quan