2012-06-17 28 views
3

我有以下规格:我不能保存的对象与RSpec的2和FactoryGirl

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 

该项目的模型验证关联的存在。 ..所以,在测试之前,我想将用户保存在测试数据库中。但上面的代码不会在数据库中保存任何内容。

相反,如果我一前添加(:所有)块:

之前(:所有)做 @user = User.new(FactoryGirl.attributes_for(:用户)) @ user.save 结束

新用户被保存到数据库中。为什么?

回答

2

如果在你的模型中,项目belongs_to用户,那么你可以让工厂女孩创建一个用户,因为它创建一个项目。你只会更新你的项目工厂

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做出假设,并使用上面的方法代替:-)

+0

该项目的模型belongs_to用户通过pm_id foreign_key,我在模型中指定。真棒:)你的建议工作正常!我是Rspec和factory_girl的新手,但每天都会发现很棒的东西。 –

+0

很高兴帮助! – Andy

相关问题