Ruby on rails &引用;让我们;在rspec中,没有';无法写入数据库

Ruby on rails &引用;让我们;在rspec中,没有';无法写入数据库,ruby-on-rails,rspec,rspec-rails,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) leve

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

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

试一试

现在,
Level.count将返回2


有关更多信息,请参见Its-because
let
是延迟加载的。也就是说,只有在调用
level1
level2
(在示例中)时,才会执行块并创建记录。解决方法是使用
let

试一试

现在,
Level.count将返回2


有关更多信息,请参见《自创建》。如果我调用level_1,那么level.count==1?此外,我还参与了一个不需要我使用let的项目!发送到数据库。我可以在spec_helper中更改一个选项来执行此操作吗?@josh Use
let或在每个示例之前定义
块并调用
级别1
在执行level_1 level_2 end``之前,这将在运行示例之前创建记录。我更喜欢
let作为其较少的笔划数。这使得。如果我调用level_1,那么level.count==1?此外,我还参与了一个不需要我使用let的项目!发送到数据库。我可以在spec_helper中更改一个选项来执行此操作吗?@josh Use
let或在每个示例之前定义
块并调用
级别1
在执行level_1 level_2 end``之前,这将在运行示例之前创建记录。我更喜欢
let作为其较少的笔划数。
let!(:level_1) { Fabricate(:level, number: 1, points: 100) }       
let!(:level_2) { Fabricate(:level, number: 2, points: 200) }