2012-09-07 14 views
6

私は自分のユーザーモデルのコントローラ仕様を構築していますが、失敗するはずです。スペックは以下の通りです:RSpecコントローラのテスト - 予期せぬ動作の「割り当て」

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に([ユーザー])は、" 渡し、それが故障したような気がします。結局のところ、私は上に2人のユーザ(userとother_user)を作成しました。私は明らかに何が起こっているのか誤解しているので、誰かがそれを説明することができますか?

答えて

7

letは遅延です。最初に呼び出されるまでユーザーを作成しません(その時点で結果がメモされます)。 userを呼び出しますが、other_userは呼び出していないので、最初のユーザーのみが実際に作成され、仕様が合格します。

熱心な評価が必要な場合はlet!を使用するか、other_userをどこかに呼び出してください。

RSpec Documentation

+0

そのためにありがとうございました!それは私を夢中にさせていた。 – Bryce

関連する問題