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 (
response.code.should eq(200)
) - standard test/unit assertions (
assert_equal 200, response.code
) - rails assertions (
assert_response 200
) - rails-specific matchers:
response.should render_template (wraps assert_template)
response.should redirect_to (wraps assert_redirected_to)
assigns(:widget).should be_a_new(Widget)
describe TeamsController do
describe "GET index" do
it "assigns @teams" do
team = Team.create
get :index
assigns(:teams).should eq([team])
end
it "renders the index template" do
get :index
response.should render_template("index")
end
end
end
- by default, views are not rendered. See views are stubbed by default and render_views for details.