2012-09-07 7 views
6

मैंने अपने उपयोगकर्ता मॉडल के लिए एक नियंत्रक spec बनाया है, और यह गुजरता है, हालांकि मुझे लगता है कि यह असफल होना चाहिए। कल्पना के नीचे है:आरएसपीसी नियंत्रक परीक्षण - अप्रत्याशित रूप से व्यवहार करने वाले "असाइन"

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 

लाइन "(प्रदान करती है (: उपयोगकर्ता)) की उम्मीद है। eq करने के लिए ([उपयोगकर्ता])" गुजरता है, लेकिन मुझे लगता है कि यह असफल चाहिए। आखिरकार, मैंने शीर्ष पर दो उपयोगकर्ता (उपयोगकर्ता और अन्य_यूज़र) बनाए हैं। मैं स्पष्ट रूप से गलतफहमी कर रहा हूं कि क्या हो रहा है, तो क्या कोई इसे समझा सकता है?

उत्तर

7

let आलसी है; यह उपयोगकर्ता को पहली बार तब तक नहीं बनाएगा जब तक इसे पहली बार नहीं कहा जाता है (जिस बिंदु पर परिणाम याद किया जाता है)। चूंकि आप user पर कॉल करते हैं लेकिन other_user नहीं, केवल पहले उपयोगकर्ता को वास्तव में बनाया गया है, और spec passes।

let! का उपयोग करें यदि आप उत्सुक मूल्यांकन चाहते हैं, या सुनिश्चित करें कि आप कहीं other_user पर कॉल करें।

RSpec Documentation

+0

इसके लिए आपको बहुत बहुत धन्यवाद! यह मुझे पागल बना रहा था। – Bryce

संबंधित मुद्दे