Logo: Relish

  1. Sign up
  2. Sign in

Project: RSpec Rails 3.1

Controller specs

Controller specs live in spec/controllers or any example group with
:type => :controller.

A controller spec is an RSpec wrapper for a Rails functional test
(ActionController::TestCase::Behavior).
It allows you to simulate a single http request in each example, and then
specify expected outcomes such as:

  • rendered templates
  • redirects
  • instance variables assigned in the controller to be shared with the view
  • cookies sent back with the response

To specify outcomes, you can use:

  • standard rspec matchers (expect(response.status).to eq(200))
  • standard test/unit assertions (assert_equal 200, response.status)
  • rails assertions (assert_response 200)
  • rails-specific matchers:

    • render_template

      expect(response).to render_template(:new)   # wraps assert_template
      
    • redirect_to

      expect(response).to redirect_to(location)   # wraps assert_redirected_to
      
    • have_http_status

      expect(response).to have_http_status(:created)
      
    • be_a_new

      expect(assigns(:widget)).to be_a_new(Widget)
      

Examples

RSpec.describe TeamsController do
  describe "GET index" do
    it "assigns @teams" do
      team = Team.create
      get :index
      expect(assigns(:teams)).to eq([team])
    end

    it "renders the index template" do
      get :index
      expect(response).to render_template("index")
    end
  end
end

Views

Topics

  1. Cookies
  2. controller spec
  3. views are stubbed by default
  4. render_views
  5. anonymous controller
  6. bypass rescue
  7. engine routes for controllers

Last published about 1 month ago by myronmarston.