RSpecで全テスト共通の前処理を書く
RSpecで全テスト共通の前処理を書く場合、共通のshared_contextを作って呼び出すのが一般的です。
例えばログインの処理などは下記のように書いておいて
[/spec/spec_helper.rb]
shared_context 'when user is logged in', :logged_in => true do before :each do # ログインの処理 end end
[users_controller_spec.rb]
describe UsersController, :logged_in => true do # テスト end
のように実装できて便利です。
便利なんですが、作ったcontextを書かなきゃいけないとちょっと困る場合があります。
例えばObserverを実装してUserをcreateしたら何らかの処理を行うようにした時、他のテストに影響がないようにすでにあるテストではObserverを切っておきたいといったケースです。わざわざ全てのテストにcontextを書くのも微妙です。
そういう時、下記のように書いておくと全テストで共通の前処理を記述することができます。
[/spec/spec_helper.rb]
RSpec.configure do |config| config.before do #オブザーバーを切る ActiveRecord::Base.observers.disable :all end end
これで、全てのテストのbefore句の最初に記述した処理を流すことができます。そもそもうまくテストを設計していればこんなの書かなくてもいいのかもしれませんが、現場では往々にして苦渋の決断が必要なシーンがあると思うので必要な時に記述してみてはいかがでしょうか。