rspec:quot;的确切含义是什么;例如;对于'let'的缓存?
提到rspec:quot;的确切含义是什么;例如;对于'let'的缓存?,rspec,Rspec,提到let的值在同一示例中被缓存: 使用let定义已记忆的辅助对象方法。该值将被缓存 跨同一示例中的多个调用,但不跨示例 它并没有确切地说明什么是“示例”,但我认为它是指最顶层的描述或上下文块。对吗?如果是这样的话,您能否链接到明确说明这一点的文档 在其他地方,文件注意到以下内容: descripe方法创建一个示例组。在经过的街区内 要进行描述,可以使用描述或 上下文方法,或者您可以使用它声明示例或指定 方法 那么,“示例”是context/descripe块还是it块呢?简而言之,let值的范
let
的值在同一示例中被缓存:
使用let定义已记忆的辅助对象方法。该值将被缓存
跨同一示例中的多个调用,但不跨示例
它并没有确切地说明什么是“示例”,但我认为它是指最顶层的描述或上下文块。对吗?如果是这样的话,您能否链接到明确说明这一点的文档
在其他地方,文件注意到以下内容:
descripe方法创建一个示例组。在经过的街区内
要进行描述,可以使用描述或
上下文方法,或者您可以使用它声明示例或指定
方法
那么,“示例”是context/descripe
块还是it
块呢?简而言之,let
值的范围究竟是什么:一个it
,或者一个context/description
?一个例子是一个it块,你可以很容易地看到,在它的块之间,let值没有被缓存和重新填充
您引用的第二段提到创建一组示例。示例是指规范树中的叶
请查看此组合规格:
RSpec.describe MyClass do
let(:x) { 1+2+3 }
describe '#foo'
context 'when x happens'
specify do
expect(subject.foo).to eq(x)
end
end
specify do
expect(subject.foo).not_to eq(x)
expect(subject.foo).not_to eq(x+1)
end
end
end
x
将为每个指定块计算一次且仅计算一次。如果您在内部多次使用它(如示例中的第二个中,请指定。第二个用法将只是检索记忆值(1+2+3
)
但是对于每个specify
都将计算该值(除非未使用该值,因为let
也会延迟计算)
您还询问了let
的作用域,这是不同的:作用域(如定义的元素可用的作用域)是您定义它的块。它向下冒泡到每个it/指定它里面的块