RSpec テストで例外を発生させる方法
概要
テストシナリオで行き詰まっています。
コントローラーメソッドがあります:
def update
@object = Object.find params[:id]
# some other stuff
@object.save
rescue ActiveRecord::StaleObjectError
# woo other stuff
end
最初の部分は次のようにテストします。
context '#update'
let(:object) { double }
it 'nothing fails' do
# some other stuff
expect(Object).to receive(:find).with('5').and_return(object)
expect(object).to receive(:save).and_return(true)
xhr :put, :update, id:5
expect(response).to be_success
expect(assigns(:object)).to eq(object)
end
end
次に、ActiveRecord::StaleObjectError 例外をテストしたいと思います。スタブ化したいのですが、これを行う方法が見つかりませんでした。
そこで私の質問は、RSpec テストで ActiveRecord::StaleObjectError を発生させるにはどうすればよいですか?
解決策
たとえばこのように
expect(object).to receive(:save).and_raise(ActiveRecord::StaleObjectError)