6

ユーザーモデルのコントローラー仕様を作成しましたが、失敗するはずですが、合格です。仕様は以下のとおりです。

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

「expect(assigns(:users))。to eq([user])」という行は通過しますが、失敗するはずです。結局のところ、一番上に2人のユーザー(userとother_user)を作成しました。私は明らかに何が起こっているのか誤解しているので、誰かがそれを説明できますか?

4

1 に答える 1

7

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

let!熱心な評価が必要な場合、またはother_userどこかに電話することを確認する場合に使用します。

RSpecドキュメント

于 2012-09-07T14:52:25.153 に答える