在(:build)之后定义的Factory Girl覆盖字段

时间:2013-12-17 14:21:38

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

我可以拥有多个个人资料。所有这些都必须与相同的“api许可证”相关联。 这是我的个人资料工厂:

FactoryGirl.define do
  factory :profile do
    name "MyString"

    after(:build) do |profile|
      api_license = ApiLicense.find_by_name('API test name')
      api_license ||= FactoryGirl.create(:api_license)

      profile.api_license = api_license
    end
  end
end

我可以使用FactoryGirl.build(:profile)或FactoryGirl.create(:profile)定义多个配置文件,并且所有这些配置文件都附加到相同的api许可证上,这很好。

当我想测试“无api许可证案例”时出现问题。

例如,FactoryGirl.build(:profile,:api_license => nil)不起作用,因为似乎在将nil值分配给api许可证之后执行(:build)之后。

有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:0)

在不指定api许可证的情况下创建另一个工厂

FactoryGirl.define do
  factory :profile_without_api_license, :class => Profile do
    name "MyString"
  end

  factory :profile do
    name "MyString"

    after(:build) do |profile|
      api_license = ApiLicense.find_by_name('API test name')
      api_license ||= FactoryGirl.create(:api_license)

      profile.api_license = api_license
    end
  end
end

无论何时需要无牌照

,请致电工厂profile_without_api_license