Ruby on rails 使用带有let和subject语法的rspec时需要调用save

Ruby on rails 使用带有let和subject语法的rspec时需要调用save,ruby-on-rails,rspec,Ruby On Rails,Rspec,试图习惯rspec let/subject语法,但我想不出什么。 我有这个规格: describe Permission do subject(:permission){FactoryGirl.create(:permission, role: role, branch: branch, user: user)} let(:role){FactoryGirl.create(:role, name: 'master')} let(:branch){FactoryGirl.create(

试图习惯rspec let/subject语法,但我想不出什么。 我有这个规格:

describe Permission do
  subject(:permission){FactoryGirl.create(:permission, role: role, branch: branch, user: user)}
  let(:role){FactoryGirl.create(:role, name: 'master')}
  let(:branch){FactoryGirl.create(:branch)}
  let(:user){FactoryGirl.create(:user)}

  context "role_names_by_user_and_branch" do
    it "should return role names for the given user / branch pair" do
      # permission.save
      Permission.role_names_by_user_and_branch(user, branch).should include(role.name)
    end
  end

end
注意注释掉的
权限。保存
。如果我在考试中加上这个。
这是我不明白的部分。如果我在做
FactoryGirl。创建该权限
应已保存,并且查询正在工作

我的工厂非常基础:

FactoryGirl.define do
  factory :permission do
    user
    branch
    role
  end
end
这是因为它是延迟加载的,所以除非您在测试中引用它,否则不会计算该块

这意味着,即使在测试中只调用
权限
(而不是
权限.save
),也足以获得所需的行为。或者,您可以使用,根据文档,它“与
subject
类似,只是块由隐式before钩子调用。”


请注意,
let
的行为方式与
let相同

好的有意义。我试着让它和let一起工作!但不管出于什么原因,我都不想做这个题目!很好的解释,谢谢!