Module: RSpec::Rails::ControllerExampleGroup
- Extended by:
- ActiveSupport::Concern, ModuleInclusion
- Includes:
- ActionController::TestCase::Behavior, Matchers, BrowserSimulators, Matchers::RedirectTo, Matchers::RenderTemplate, Matchers::RoutingMatchers, RailsExampleGroup, ViewRendering
- Defined in:
- lib/rspec/rails/example/controller_example_group.rb
Overview
Extends ActionController::TestCase::Behavior to work with RSpec.
Examples
with stubs
describe WidgetsController do
describe "GET index" do
it "assigns all widgets to @widgets" do
= stub_model(Widget)
Widget.stub(:all) { }
get :index
assigns(:widgets).should eq([])
end
end
end
with a factory
describe WidgetsController do
describe "GET index" do
it "assigns all widgets to @widgets" do
= Factory(:widget)
get :index
assigns(:widgets).should eq([])
end
end
end
with fixtures
describe WidgetsController do
describe "GET index" do
fixtures :widgets
it "assigns all widgets to @widgets" do
get :index
assigns(:widgets).should eq(Widget.all)
end
end
end
Matchers
In addition to the stock matchers from rspec-expectations, controller specs add these matchers, which delegate to rails’ assertions:
response.should render_template(*args)
=> delegates to assert_template(*args)
response.should redirect_to(destination)
=> delegates to assert_redirected_to(destination)
Isolation from views
RSpec’s preferred approach to spec’ing controller behaviour is to isolate the controller from its collaborators. By default, therefore, controller example groups do not render views. This means that a view template need not even exist in order to run a controller spec, and you can still specify which template the controller should render.
View rendering
If you prefer a more integrated approach, similar to that of Rails’ functional tests, you can tell controller groups to render views with the render_views
declaration:
describe WidgetsController do
render_views
...
Defined Under Namespace
Modules: ClassMethods, InstanceMethods