"让"在rspec中没有写入数据库

时间:2016-08-13 21:32:49

标签: ruby-on-rails rspec rspec-rails

以下内容不会写入我的数据库,因此我的测试失败了:

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
这似乎很奇怪。

1 个答案:

答案 0 :(得分:3)

因为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