Ruby on Rails - "let" 在 rspec 中不会写入数据库



下面的代码没有写入我的数据库,所以我的测试失败了:

let(:level_1) { Fabricate(:level, number: 1, points: 100) }       
let(:level_2) { Fabricate(:level, number: 2, points: 200) }
Level.count # 0

before do
  level_1 = Fabricate(:level, points: 100, number: 1)
  level_2 = Fabricate(:level, points: 200, number: 2)
end
Level.count # 2

这似乎很奇怪。

这是因为let是惰性加载的。这意味着,只有在调用level1level2(在示例中)时,才会执行块并创建记录。一个解决方法是使用let!,它在每个示例之前调用。

let!(:level_1) { Fabricate(:level, number: 1, points: 100) }       
let!(:level_2) { Fabricate(:level, number: 2, points: 200) }

现在,Level.count将返回2

更多信息,请参见https://www.relishapp.com/rspec/rspec-core/v/2-5/docs/helper-methods/let-and-let

相关内容

  • 没有找到相关文章

最新更新