おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

Cahpter 17 Extending RSpec その1

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のメソッドが使えるようになる。マクロを作る一番簡単な方法らしい。

mock_with(framework)

利用するモックフレームワークを指定する。

指定できるのは

  • :rspec(デフォルト)
  • :mocha
  • :flexmock
  • :rr

他のモックフレームワークを使いたい場合はアダプタを書いてmock_withに渡すことが出来る。