我无法使用RSpec 2和FactoryGirl保存对象

时间:2012-06-17 16:05:44

标签: ruby-on-rails rspec factory-bot

我有以下规格:

  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   端

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

1 个答案:

答案 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做出假设,而是使用上面的方法: - )