如何拥有一个工厂有两个不同的名称

问题描述 投票:0回答:1

我们正在将回复模型迁移到评论模型。与此同时,我希望能够拥有 :reply 和 :comment 工厂来创建相同的东西。

例如,下面的代码是我现在使用的,但我不想“重复”代码,我希望它以某种方式成为完全相同的工厂,或者从另一个工厂调用一个工厂。

FactoryBot.define do
  factory :reply do
    sequence(:text) { |n| "Reply #{n}" }
    subject { create(:annotation) if subject_id.nil? && subject_type.nil? }
    user_id { create(:user).id }
  end

  # just mirrors :reply for now, in prep for reply being replaced by comment
  factory :comment, class: 'Reply' do
    sequence(:text) { |n| "Reply #{n}" }
    subject { create(:annotation) if subject_id.nil? && subject_type.nil? }
    user_id { create(:user).id }
  end
end
ruby factory-bot
1个回答
0
投票

您可以为工厂指定

aliases
文档

例如:

FactoryBot.define do
  factory :reply, aliases: [:comment] do
    sequence(:text) { |n| "Reply #{n}" }
    subject { create(:annotation) if subject_id.nil? && subject_type.nil? }
    user_id { create(:user).id }
  end
© www.soinside.com 2019 - 2024. All rights reserved.