rpsec""让"使用memoization?

时间:2016-09-27 18:46:57

标签: ruby activerecord rspec memoization

它在" RSpec Core 3.5":

中说
  

使用let定义记忆辅助方法

我不清楚他们的例子。他们是否说:count的表达式仅针对规范评估一次,并且在每个规范之间再次评估?

我特别感兴趣的是了解let的memoization如何与ActiveRecord对象一起使用。

1 个答案:

答案 0 :(得分:4)

  

他们是否说表达式:count只评估一次   对于规范,还是在每个规范之间?

来自docs的答案:

  

该值将在同一示例中的多个调用中缓存,但是   不是跨越例子。

所以是的,每个例​​子都会评估一次。

换句话说,每it块将对该值进行一次评估。

我觉得他们的例子超级富有表现力,看:

$count = 0
RSpec.describe "let" do
  let(:count) { $count += 1 }

  # count will not change no matter how many times we reference it in this it block
  it "memoizes the value" do
    expect(count).to eq(1) # evaluated (set to 1)
    expect(count).to eq(1) # did not change (still 1)
  end

  # count will be set to 2 and remain 2 untill the end of the block
  it "is not cached across examples" do
    expect(count).to eq(2) # evaluated in new it block
  end
end

我们在count示例中引用了memoizes the value两次,但只评估了一次。