我有以下规格:
it "saves a default 'active' status if not specified" do
if User.count <= 0
user = User.new(FactoryGirl.attributes_for(:user))
user.save
end
project = FactoryGirl.create(:project, :status => nil)
project.status.should eq("active")
end
使用此FactoryGirl对象:
factory :project do
title "A short title"
description "A short description"
parent_id 1
pm_id 1
status "active"
end
项目的模型验证了关联的存在......因此,在测试之前,我想将用户保存在测试数据库中。但上面的代码不会在数据库中保存任何内容。
相反,如果我添加一个before(:all)块:
之前(:all)做 @user = User.new(FactoryGirl.attributes_for(:user)) @ user.save 端
新用户将保存到数据库中。为什么呢?
答案 0 :(得分:2)
如果在您的模型中,项目属于用户,那么您可以让工厂女孩在创建项目时简单地创建用户。您只需将项目工厂更新为
即可factory :project do
title "A short title"
description "A short description"
parent_id 1
pm_id 1
status "active"
user
end
我认为这与上面的代码具有相同的效果。
其次,在上面的代码中,您似乎没有在任何时候将项目与用户相关联。 (当然假设pm_id或parent_id都没有引用用户,我可以建议你不要对id做出假设,而是使用上面的方法: - )