Bacon さん before/after

RSpecなんてゴチャゴチャしててソース読む気にならないじゃん!そんなもん使えるか!

...と思ったかどうか分かりませんが、Ramazeさんはテストを記述するのに軽量RSpecとも言える Bacon を使っているんですよね。しかしこの Bacon、困ったことに after の呼び出しがどうにも変(0.9.0)。

describe "before/after in Bacon" do
   before do
      puts "*** before ***"
   end
   
   after do
      STDOUT.puts "*** after ***"
   end
   
   it "should call before() and after()" do
      true.should.be.false
   end
end

として、これをテストしてみると。

before/after in Bacon
- should call before() and after()*** before ***
 [FAILED]

Bacon::Error: true.false?() failed
        ./test_bacon.rb:11: before/after in Bacon - should call before() and after()
        ./test_bacon.rb:10
        ./test_bacon.rb:1

1 specifications (0 requirements), 1 failures, 0 errors

となり、テストに失敗した場合、after が呼び出されていないのが分かります。

一方RSpecでは、

describe "before/after in RSpec" do
   before do
      puts "*** before ***"
   end
   
   after do
      puts "*** after ***"
   end
   
   it "should call before() and after()" do
      true.should be_false
   end
end

とすると、結果は次のようになります。

*** before ***
*** after ***
F

1)
'before/after in RSpec should call before() and after()' FAILED
expected false, got true
./test.rb:11:

Finished in 0.034183 seconds

1 example, 1 failure

というわけで、きちんと after が呼び出されました。素晴しい、やっぱりRSpec最高!!!

などと感心している場合ではないので、Bacon の方をきっちり直しておきたいところなのですが、どうやって直すべきか思案中です。でも時間がないので、とりあえず一番手抜きな修正方法でパッチを送っておこうかなぁ、と思います。そしたら作者さんが勝手にうまいこと直してくれるかも知れないし。