Logo: Relish

  1. Sign up
  2. Sign in

Project: RSpec Rails 3.3

bypass rescue

Use bypass_rescue to bypass both Rails' default handling of errors in
controller actions, and any custom handling declared with a rescue_from
statement.

This lets you specify details of the exception being raised, regardless of
how it might be handled upstream.

Background
Given
a file named "spec/controllers/gadgets_controller_spec_context.rb" with:
class AccessDenied < StandardError; end

class ApplicationController < ActionController::Base
  rescue_from AccessDenied, :with => :access_denied

  private

  def access_denied
    redirect_to "/401.html"
  end
end
Scenarios
standard exception handling using `rescue_from`
Given
a file named "spec/controllers/gadgets_controller_spec.rb" with:
require "rails_helper"

require 'controllers/gadgets_controller_spec_context'

RSpec.describe GadgetsController, :type => :controller do
  before do
    def controller.index
      raise AccessDenied
    end
  end

  describe "index" do
    it "redirects to the /401.html page" do
      get :index
      expect(response).to redirect_to("/401.html")
    end
  end
end
When
I run rspec spec/controllers/gadgets_controller_spec.rb
Then
the examples should all pass
bypass `rescue_from` handling with `bypass_rescue`
Given
a file named "spec/controllers/gadgets_controller_spec.rb" with:
require "rails_helper"

require 'controllers/gadgets_controller_spec_context'

RSpec.describe GadgetsController, :type => :controller do
  before do
    def controller.index
      raise AccessDenied
    end
  end

  describe "index" do
    it "raises AccessDenied" do
      bypass_rescue
      expect { get :index }.to raise_error(AccessDenied)
    end
  end
end
When
I run rspec spec/controllers/gadgets_controller_spec.rb
Then
the examples should all pass

Last published about 2 years ago by myronmarston.