它在" RSpec Core 3.5":
中说使用
let
定义记忆辅助方法
我不清楚他们的例子。他们是否说:count
的表达式仅针对规范评估一次,并且在每个规范之间再次评估?
我特别感兴趣的是了解let
的memoization如何与ActiveRecord对象一起使用。
答案 0 :(得分:4)
来自docs的答案:他们是否说表达式:count只评估一次 对于规范,还是在每个规范之间?
该值将在同一示例中的多个调用中缓存,但是 不是跨越例子。
所以是的,每个例子都会评估一次。
换句话说,每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
两次,但只评估了一次。