3

我有以下规格:

  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) 块:

before(:all) do @user = User.new(FactoryGirl.attributes_for(:user)) @user.save end

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

4

1 回答 1

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

于 2012-06-17T16:14:58.760 回答