0

我有一个简单的:item工厂,带有一个运行良好的嵌套附件。

FactoryGirl.define do
  factory :item do
    before_create do |item|
      item.attachments << FactoryGirl.build(:attachment, attachable: item)
    end
  end
end

我想检查以下内容

it "is invalid without a photo" do 
  FactoryGirl.create(:item).should_not be_valid
end

:item调用现有工厂时如何删除附件?

4

2 回答 2

1

您可能想要拥有两个版本的项目工厂。一个不创建关联的附件,一个创建。这将让您在不依赖附件的情况下为其他地方拥有一个项目工厂。

FactoryGirl.define do
  factory :item
end

FactoryGirl.define do
  factory :item_with_attachments, :parent => :item do
    before_create do |item|
      item.attachments << FactoryGirl.build(:attachment, attachable: item)
    end
  end
end

另一种选择是在测试其有效性之前仅远程连接附件:

it "is invalid without a photo" do 
  item = FactoryGirl.create(:item)
  item.attachments.destroy_all
  item.should_not be_valid
end
于 2013-10-26T21:21:59.970 回答
1

使用特征

FactoryGirl.define do
  factory :item do
    # default vals
  end

  trait :with_attachments do
    attachments { |item| FactoryGirl.build_list(:attachment, 1, attachable: item) }
  end
end

用法

FactoryGirl.create(:item, :with_attachments)
于 2013-10-26T21:46:37.697 回答