Ruby on rails 使用带有let和subject语法的rspec时需要调用save
试图习惯rspec let/subject语法,但我想不出什么。 我有这个规格: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(
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一起工作!但不管出于什么原因,我都不想做这个题目!很好的解释,谢谢!