ruby-on-rails - 如何重置 factory_girl 序列?

标签 ruby-on-rails ruby factory-bot

前提是我有项目工厂

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/

相关文章:

arrays - 对连接项和非连接项进行分组的 Ruby 数组计算

ruby-on-rails-3 - 厂妹,附属工厂

ruby-on-rails - Rails ActiveRecord session 存储在 HTML5 SessionStorage 而不是 Cookie 中

ruby-on-rails - rails : delete belongs_to object when old object is replaced with new

ruby-on-rails - Druby 和 ActiveRecord 的线程问题

ruby-on-rails - 工厂机器人 : create the same object multiple times

ruby-on-rails - Heroku 生产环境上的 FactoryBot

ruby-on-rails - 如何在 Rails 3.0 应用程序中使用来自 Twitter 的 Bootstrap?

ruby-on-rails - Rails:ActiveRecord::HasManyThroughSourceAssociationNotFoundError:找不到源关联

ruby-on-rails - CarrierWave 无法下载图像 - CarrierWave::IntegrityError