メインコンテンツまでスキップ

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 フック内で呼び出されるメモ化されたヘルパーメソッドを定義する

次の内容で "let_bang_spec.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 を実行すると、

すべての例がパスするはずです。