我有一个测试,有点像以下。细节并不重要,但我有一个大约需要10秒钟的方法,并在一堆测试中获取一些我想要多次使用的数据。数据不会再那么新鲜 - 我只需要获取一次。我对let的理解是它的memoizes,所以我希望以下内容只调用slow_thing一次。但是当我提到慢速时,我看到它被称为多次。我做错了什么?
describe 'example' do
def slow_thing
puts "CALLING ME!"
sleep(100)
end
let(:slowthing) { slow_thing }
it 'does something slow' do
expect(slowthing).to be_true
end
it 'does another slow thing' do
expect(slowthing).to be_true
end
end
当我进行测试时,我看到了打电话给我!多次,因为我有断言或使用慢点。
答案 0 :(得分:5)
文档状态值不跨示例缓存:
该值将在同一示例中的多个调用中缓存,但不会跨越示例。 [强调我的。]
例如,也来自文档:
$count = 0
describe "let" do
let(:count) { $count += 1 }
it "memoizes the value" do
count.should == 1
count.should == 1
end
it "is not cached across examples" do
count.should == 2
end
end
来自https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/helper-methods/let-and-let