FactoryGirl没有清洁?

时间:2014-07-21 18:33:52

标签: rspec factory-bot

任何人都知道如何在不清理数据库的情况下使用FactoryGirl?换句话说,使用工厂同时保留现有记录完整无缺?编辑:尝试这样做会产生数据库错误,因为新ID与数据库中的现有ID冲突。

我想最大的问题是让FG使用数据库的底层序列/自动增量功能。 (之前测试失败的错误数据与我无关。)

这与Rspec/FactoryGirl: clean database state类似,但我对任何方法都持开放态度。

2 个答案:

答案 0 :(得分:0)

Rails应用程序的标准RSpec行为是在每个示例之后回滚数据库事务。这可以在spec/rails_helper

中配置
RSpec.configure do |config|
  # 
  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, remove the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = true
  #
end

use_transactional_fixtures设置为false将阻止RSpec回滚测试数据库事务。通常这样做是为了允许Database Cleaner使用DatabaseCleaner.clean来管理测试数据库,但是如果删除数据库清理程序(或省略清理步骤),新创建的条目将在您运行更多测试时堆积起来。 / p>

这似乎不是一个特别好的主意 - 你几乎肯定会为每个例子重新创建必要的数据库状态,即使以较慢的测试为代价。

答案 1 :(得分:0)

因此,只要未在工厂定义中明确定义此类列,FactoryGirl就已经使用了数据库的基础序列/自动增量值。