How to raise an exception in an RSpec test

rob picture rob · Sep 2, 2015 · Viewed 10.2k times · Source

I'm stuck on a test scenario.

I have a controller method:

def update
  @object = Object.find params[:id]
  # some other stuff
  @object.save
  rescue ActiveRecord::StaleObjectError
    # woo other stuff
end  

The first part I test with:

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

Now I want to test the ActiveRecord::StaleObjectError exception. I want to stub it, but I didn't find any solution how to do this.

So my question is, how to raise the ActiveRecord::StaleObjectError in an RSpec test?

Answer

Sergio Tulentsev picture Sergio Tulentsev · Sep 2, 2015

Like this, for example

expect(object).to receive(:save).and_raise(ActiveRecord::StaleObjectError)