Chapter 13 Spec::Expectations その2 - おもしろWEBサービス開発日記の続き。ちょっと間を飛ばして17章へ。
17.1 Global Configuration
exampleにモジュールをincludeしてるかのようなglobalなbeforeやafterを定義している。
下記のようにSpec::Runnerモジュールを利用してグローバルな設定を扱える。
Spec::Runner.configure { |config| config.config_option }
configオブジェクトが持っているメソッドは下記のようなものがある。
before(scope = :each, options={}, &block)
append_beforeのエイリアス。一番よく使われる。
append_before(scope = :each, options={}, &block)
全てのexample groupで実行される。scopeには:each, :all, :suiteがある。
- :eachを指定すると全てのexampleの実行前にブロックが実行される
- :allを指定すると全てのexample groupの実行前にブロックが実行される
- :suiteを指定するとexample実行の一番最初にブロックが一度だけ実行される
optionsは:typeだけサポートしていて、例えば下記のようにするとcontrollerのspecだけが実行される。
config.before(:each, :type => :controller) do # ... end
prepend_before(scope = :each, options={}, &block)
append_beforeとほぼ同じだけど、リストの一番最初に追加される部分が異なる。このメソッドはあんまり使われないけど、RSpecを拡張するライブラリを使うようなときに使うかも。
after, prepend_after, append_after
全部beforeをafterにしただけで細かいところは一緒。
include(*modules, options={} )
引数で渡したmoduleを全てのexample groupでincludeする。全てのexampleでmoduleのメソッドが使えるようになる。optionsはbeforeとかと一緒で:typeをサポートしてる。
extend(*modules, option={})
引数で渡したmoduleを全てのexample groupでextendする。全てのexampleでmoduleのメソッドが使えるようになる。マクロを作る一番簡単な方法らしい。