let
和 let!
使用 let
定义一个记忆的辅助方法。该值将在同一个示例中的多次调用中被缓存,但不会跨示例缓存。
请注意,let
是惰性求值的:它直到定义的方法第一次被调用时才会被求值。可以使用 let!
强制方法在每个示例之前被调用。
默认情况下,let
是线程安全的,但可以通过禁用 config.threadsafe
使它不安全,这会使 let
的执行速度稍微快一点。
使用 let
定义记忆的辅助方法
给定一个名为“let_spec.rb”的文件,其中包含
$count = 0
RSpec.describe "let" do
let(:count) { $count += 1 }
it "memoizes the value" do
expect(count).to eq(1)
expect(count).to eq(1)
end
it "is not cached across examples" do
expect(count).to eq(2)
end
end
当我运行 rspec let_spec.rb
时
那么这些示例应该全部通过。
使用 let!
定义一个记忆的辅助方法,该方法在 before
钩子中被调用
给定一个名为“letbangspec.rb”的文件,其中包含
$count = 0
RSpec.describe "let!" do
invocation_order = []
let!(:count) do
invocation_order << :let!
$count += 1
end
it "calls the helper method in a before hook" do
invocation_order << :example
expect(invocation_order).to eq([:let!, :example])
expect(count).to eq(1)
end
end
当我运行 rspec let_bang_spec.rb
时
那么这些示例应该全部通过。