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-becauselet
是延迟加载的。也就是说,只有在调用level1
和level2
(在示例中)时,才会执行块并创建记录。解决方法是使用let在每个示例之前调用的代码>
试一试
现在,Level.count将返回2
有关更多信息,请参见《自创建》。如果我调用level_1,那么level.count==1?此外,我还参与了一个不需要我使用let的项目!发送到数据库。我可以在spec_helper中更改一个选项来执行此操作吗?@josh Uselet代码>或在每个示例之前定义块并调用级别1
在执行level_1 level_2 end``之前,这将在运行示例之前创建记录。我更喜欢let代码>作为其较少的笔划数。这使得。如果我调用level_1,那么level.count==1?此外,我还参与了一个不需要我使用let的项目!发送到数据库。我可以在spec_helper中更改一个选项来执行此操作吗?@josh Uselet代码>或在每个示例之前定义块并调用级别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) }