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

Bry*_*yce 6 bdd rspec-rails ruby-on-rails-3

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

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
Run Code Online (Sandbox Code Playgroud)

行"expect(assigns(:users)).到eq([user])"通过,但我觉得它应该失败.毕竟,我在顶部创建了两个用户(user和other_user).我显然误解了发生的事情,有人可以解释一下吗?

Joh*_*ohn 7

let懒惰; 直到第一次调用它时才会创建用户(此时结果被记忆).既然你打电话user但不打电话other_user,那么实际上只创建了第一个用户,并且规范通过了.

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

RSpec文档