Monday, February 15, 2016

Rspec tricks for DRY mocked specs

These “tricks” are straight from the docs. One will help DRY up your specs, the other will help you mock your controller for controller tests.

Shared Contexts

Shared context allows for extracting certain setup steps and sharing them across several different sets of tests.

First, define your shared context:

RSpec.shared_context "user setup" do
  let(:user) { User.new(name: 'Chuck Norris') }
  before { allow(user).to receive(:some_method) }
end

Then, include it in your spec files:

describe UsersController do
  include_context 'user setup'
  
  # Tests go here...
end

Anonymous Controllers

Anonymous controllers are a way to specify certain behavior for the controller you are trying to test, or more likely for a parent controller. The thing I found it most useful for, and not coincidentally the thing that the docs says it is useful for, is testing global error handling.

describe UsersController do
  controller do
    def index
      raise AccessDenied
    end
  end

  subject { get :index }

  describe "handling AccessDenied exceptions" do
    it "redirects to the /401.html page" do
      expect(subject).to redirect_to("/401.html")
    end
  end
end

No comments:

Post a Comment