如何在FactoryBot中用同一工厂实现两个不同名称
复用FactoryBot中Reply与Comment工厂的代码
在将Reply模型迁移至Comment模型的过渡阶段,要同时保留:reply和:comment工厂且两者生成内容一致,你可以利用FactoryBot的工厂继承特性消除代码重复,无需重复编写相同的属性配置。
修改后的代码:
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 # 继承:reply工厂的所有配置,指定类为Reply(迁移完成后可改为Comment) factory :comment, class: 'Reply', parent: :reply do # 无需重复定义属性,除非需要覆盖特定配置 end end
说明:
parent: :reply让:comment工厂完全复用:reply的所有属性逻辑,后续修改:reply的配置时,:comment会自动同步,减少维护成本。- 当前
:comment工厂指定class: 'Reply'是因为迁移未完成,等后续替换为Comment模型后,只需将这里的class改为Comment即可,属性部分无需改动。
内容的提问来源于stack exchange,提问作者pixelearth
相关产品推荐
相关产品推荐

