为什么rspec没有记住这个?

时间:2014-02-18 13:45:26

标签: ruby rspec

我有一个测试,有点像以下。细节并不重要,但我有一个大约需要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

当我进行测试时,我看到了打电话给我!多次,因为我有断言或使用慢点。

1 个答案:

答案 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