阻止Rails测试删除种子数据

aar*_*ron 13 ruby testing ruby-on-rails seed fixtures

我使用seeds.rb来填充一些状态模型参考数据:

State.create :name => 'Alabama', :abbreviation => 'AL'
State.create :name => 'Alaska', :abbreviation => 'AK'
# ...
Run Code Online (Sandbox Code Playgroud)

虽然我没有使用状态装置(因为它的种子数据一开始,我认为仅仅为了测试而不必复制它),Rails测试框架似乎在测试期间删除了所有状态种子数据.(我正在删除,重新创建,迁移和重新安装测试数据库,并在单元测试运行之前确认数据存在.)

结果是这个断言在seeds.rb中成功但在单行测试中失败:

assert_equal 51, State.all.size

1) Failure:
test_state_seeds_are_present(StateTest) [/test/unit/state_test.rb:24]:
<51> expected but was
<0>.
1 tests, 1 assertions, 1 failures, 0 errors
Run Code Online (Sandbox Code Playgroud)

我已经尝试在基本测试类fixtures语句中明确列出非状态模型,以及翻转事务fixtures标志(正如预期的那样,这只会影响测试期间创建的记录).当然,正在考虑的测试本身并不删除这些记录.

始终删除州记录.有没有办法告诉Rails只是脱掉种子数据?我是否需要复制灯具中的所有数据以确保它重新加载?如果没有重大政治事件,我预计州数据将相对稳定.

TIA

Luk*_*ncl 12

测试会删除数据库中的所有数据,然后加载您的灯具(如果有的话).

在测试运行之前,您需要让测试助手加载种子文件.有几种方法可以做到这一点,请查看我的类似问题:如何自动将db:seed数据加载到测试数据库中?

最简单的方法可能只是添加

require "#{Rails.root}/db/seeds.rb"

到test_helper.rb文件的顶部(假设您使用内置测试框架).

  • 您是否有一个要在种子文件中填充的类的fixture yml文件?因为当灯具运行时,这将吹走所有数据.删除种子的夹具文件; 或者如果您不能这样做,请使用Simone的示例,其中在每次测试之前加载夹具数据. (3认同)
  • 是的,这有点反直觉,但如果yml文件在那里并且为空,它仍然会删除该表的内容. (2认同)