RSpec控制器测试 - “分配”意外行为

时间:2012-09-07 14:42:45

标签: ruby-on-rails-3 bdd rspec-rails

我已经为我的用户模型构建了一个控制器规范,但它通过了,虽然我觉得它应该失败。规范如下:

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)。我显然误解了发生的事情,有人可以解释一下吗?

1 个答案:

答案 0 :(得分:7)

let懒惰;直到第一次调用它时才会创建用户(此时结果被记忆)。由于您致电user但未other_user,因此实际上只创建了第一个用户,并且规范通过了。

如果您想进行急切评估,请使用let!,或确保在某个地方致电other_user

RSpec Documentation