"let" in rspec 不写入数据库
"let" in rspec doesn't write to database
以下内容没有写入我的数据库,所以我的测试失败了:
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
是延迟加载的。意思是,只有当您调用 level1
和 level2
(在示例中)时,才会执行块并创建记录。解决方法是使用 let!
,它在每个示例之前调用。
尝试
let!(:level_1) { Fabricate(:level, number: 1, points: 100) }
let!(:level_2) { Fabricate(:level, number: 2, points: 200) }
现在,Level.count
将 return 2
有关更多信息,请参阅 https://www.relishapp.com/rspec/rspec-core/v/2-5/docs/helper-methods/let-and-let
以下内容没有写入我的数据库,所以我的测试失败了:
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
是延迟加载的。意思是,只有当您调用 level1
和 level2
(在示例中)时,才会执行块并创建记录。解决方法是使用 let!
,它在每个示例之前调用。
尝试
let!(:level_1) { Fabricate(:level, number: 1, points: 100) }
let!(:level_2) { Fabricate(:level, number: 2, points: 200) }
现在,Level.count
将 return 2
有关更多信息,请参阅 https://www.relishapp.com/rspec/rspec-core/v/2-5/docs/helper-methods/let-and-let