letlet!

使用 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

那么这些示例应该全部通过。