我试着四处查看是否确实记录了let(:X)可以在before(:each)之前安全使用,并在每次“before(:each)”执行之前清除缓存值,这意味着on在before(:each)执行之前,上一个示例中的缓存值不再使用,但是在第一次调用定义的let方法时会生成new on(参见下面的示例)。
来自relishapp之前(:每个)/之前(:示例)的文档 -
https://relishapp.com/rspec/rspec-core/v/3-5/docs/hooks/before-and-after-hooks
“在钩子之前和之后使用以在之前和/或之后执行任意代码 一个例子的主体运行..“
let()文档是relishapp: “使用let来定义一个memoized帮助器方法。该值将被缓存 在同一个例子中多次调用,但不是跨越示例。“
https://relishapp.com/rspec/rspec-core/v/3-5/docs/helper-methods/let-and-let
因此,在每个之前(:每个)/之前(:示例)执行之前,我们将获得由let而不是chached发生的“新鲜”值(这意味着根据文档, before(:each)/ before(:example)block被视为示例的一部分)?我知道它是有道理的,但我没有看到它在某处记录 - 有人可以提供链接到它所写的文档吗?
示例代码:
describe 'SOMETHING' do
let(:first) { Object.new }
before do
stub(first).foo? { true }
end
it 'test1' do
# will first.foo? always returns true here?
#Some test work...
end
it 'test2' do
# will first.foo? always returns true here?
# any chance the stubbing in the before occurs
# on the instance from the previous test before
# the value is cleared from the cache?
#Test2...
end
end