フック、そんなのもあるのか!! # CukeやRSpecの前後処理フック

Akabane.rbとかやってみたい今日この頃です。土曜の9:00AMからまるます屋とかで。まぁ私自身はだいぶ先まで土日のマイルは枯渇してるんですけど。

それはそうと、RSpecの全Example(it)やCucumberのすべてのシナリオで前後処理をしたくなることはありませんか? ありますよね。
たとえばconfgatronというgemがあって、設定をまとめる依り代になってくれるんですが、これがSingleton(≒グローバル変数)なので各テストの前後にちゃんとリセットしたい場合とか。
ドキュメントをあたってみたらちゃんと用意されていたのでメモです。

RSpec

Spec::Runner.configure(&block)のブロック中でbefore()とかafter()を書きます。Railsの人だとspec/spec_helper.rbあたりに書いてくださいな。

Spec::Runner.configure do |config|
  config.before(:each) do
    configatron.temp_start
  end

  config.after(:each) do
    configatron.temp_end
  end
end

ExampleGroupのタイプ別にもかけられます。詳しくは http://rspec.info/documentation/before_and_after.html をどうぞ。

Cucumber

Cucumberの場合も同じような感じで書けます。features/support/env.rbあたりに書くか、まぁうまい感じに分離してよ、とWikiに書いてありました。

Before do
  configatron.temp_start
end

After do
  configatron.temp_end
end

これもタグごとに実行できたりするみたいです。いろいろ調べてみてください。タグについてもいつか書きたいな。
http://wiki.github.com/aslakhellesoy/cucumber/hooks