前提是我有项目工厂
Factory.define :project do |p|
p.sequence(:title) { |n| "project #{n} title" }
p.sequence(:subtitle) { |n| "project #{n} subtitle" }
p.sequence(:image) { |n| "../images/content/projects/#{n}.jpg" }
p.sequence(:date) { |n| n.weeks.ago.to_date }
end
我正在创建项目实例
Factory.build :project
Factory.build :project
此时,下次我执行 Factory.build(:project) 时,我将收到一个标题设置为“project 3 title”等的 Project 实例。不足为奇。
现在假设我希望在此范围内重置我的计数器。像这样的东西:
Factory.build :project #=> Project 3
Factory.reset :project #=> project factory counter gets reseted
Factory.build :project #=> A new instance of project 1
实现此目标的最佳方法是什么?
我目前使用的是以下版本:
工厂女孩 (1.3.1) factory_girl_rails (1.0)
最佳答案
只需在回调之前/之后调用 FactoryGirl.reload。这在 FactoryGirl 代码库中定义为:
module FactoryGirl
def self.reload
self.factories.clear
self.sequences.clear
self.traits.clear
self.find_definitions
end
end
出于某种原因,调用 FactoryGirl.sequences.clear 是不够的。进行完全重新加载可能会有一些开销,但是当我尝试使用/不使用回调时,无论哪种方式,我的测试都需要大约 30 秒才能运行。因此,开销不足以影响我的工作流程。
关于ruby-on-rails - 如何重置 factory_girl 序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3359168/