FactoryGirl:用参数创建动态工厂?

Pål*_*Pål 4 rspec ruby-on-rails factory-bot

我有三个工厂,我想干.它们看起来像这样:

factory :sequenced_stamps_by_years, class: Stamp do
  ...
  sequence(:day_date) { |n| n.years.ago }
end

factory :sequenced_stamps_by_months, class: Stamp do
  ...
  sequence(:day_date) { |n| n.months.ago }
end

factory :sequenced_stamps_by_weeks, class: Stamp do
  ...
  sequence(:day_date) { |n| n.weeks.ago }
end
Run Code Online (Sandbox Code Playgroud)

我该怎么办呢?我希望能够创建这样的东西:

FactoryGirl.create_list(:sequenced_stamps_by_x, 4, x: "weeks") ## <- So that i can decide whether I want weeks, days, years, or months ago.
Run Code Online (Sandbox Code Playgroud)

这可能吗?

bou*_*der 10

如果您不喜欢继承方法,可以使用参数替代.基本上:

factory :stamps do
  ignore do
    interval :years # possible values => :years, :months, :weeks
  end

  sequence(:date_date) { |n| n.send(interval).ago }

  # rest of attributes here
end
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

FactoryGirl.create(:stamps, :interval => :months)
Run Code Online (Sandbox Code Playgroud)

要么

FactoryGirl.create(:stamps)
Run Code Online (Sandbox Code Playgroud)

默认为年.

所有这些你可以在Factory Girl瞬态属性中找到

  • 看起来语法已经更新为`transient do`而不是`ignore do`.奇迹般有效. (4认同)