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])”行通过了,但我觉得它应该失败。毕竟,我在顶部创建了两个用户(user 和 other_user)。我显然误解了发生了什么,所以有人可以解释一下吗?

4

1 回答 1

7

let懒惰;在第一次调用它之前它不会创建用户(此时结果被记忆)。由于您调用userbut not other_user,因此实际上只创建了第一个用户,并且规范通过了。

如果let!您想要急切的评估,或者确保您在other_user某个地方打电话,请使用。

RSpec 文档

于 2012-09-07T14:52:25.153 回答