RSpec:let/let!/before の使い分け
let は遅延評価、直接参照されることがなければ評価されない
シンボル名と同名の変数がスコープで使用できるようになる
let! とすると遅延評価を無視して必ず評価されるようになる
テスト内部の処理の実行順序に依存を生むことになるので多用はしない
before は必ず実行される
評価した結果を後で使う場合は自分で格納する必要がある
という特性があるので、
基本は let を使う
参照する必要がないが必ず実行する必要のある処理は before に記載する
let! は今は参照がないが、後で参照するかもしれないとかそのほうが便利言う場合に使う
という感じになる
code:rb
context do
# foo は参照されるので実行され、変数 foo で参照できる
let(:foo) { something() }
# baz は参照されていないので、実行されない
let(:baz) { something() }
# bar は参照されないが、!がついているので必ず評価される
let!(:bar) { something() }
# before は必ず実行されるがそのままでは結果を変数で参照したりできない
before do
something()
end
it do
expect(foo).to eq 'xxx'
end
end