反省はしても後悔はしない

Vim とか備忘録とか。それと関数型言語勉強中

RSpec の before(:all) と before(:each) でハマったのでメモ

before(:all) と before(:each) と it の実行タイミングとか状態とかについて調べてみた。

コード

describe 'invalid user' do
  before(:all) do
    @value = 1
    puts 'all'
 end
  before(:each) do
    @value += 1
    puts 'each'
  end

  it { p @value }
  it { p @value }
  it { p @value }
end

実行例

all
each
2
.each
2
.each
2
.

before(:all) が実行されるのは最初の 1 回だけ。
before(:each) が実行されるのは各 it ごと。

どうやら、before(:each) で状態が変わっても次の it 実行時には元に戻るらしい。