Logo: Relish

  1. Sign in

Project: RSpec Rails 2.6

views are stubbed by default

By default, controller specs stub views with a template that renders an empty
string instead of the views in the app. This allows you specify which view
template an action should try to render regardless of whether the template
compiles cleanly.

NOTE: unlike rspec-rails-1.x, the real template must exist.

Scenarios
expect template that is rendered by controller action (passes)
Given
a file named "spec/controllers/widgets_controller_spec.rb" with:
require "spec_helper"

describe WidgetsController do
  describe "index" do
    it "renders the index template" do
      get :index
      response.should render_template("index")
      response.body.should == ""
    end
    it "renders the widgets/index template" do
      get :index
      response.should render_template("widgets/index")
      response.body.should == ""
    end
  end
end
When
I run rspec spec
Then
the examples should all pass
expect template that is not rendered by controller action (fails)
Given
a file named "spec/controllers/widgets_controller_spec.rb" with:
require "spec_helper"

describe WidgetsController do
  describe "index" do
    it "renders the 'new' template" do
      get :index
      response.should render_template("new")
    end
  end
end
When
I run rspec spec
Then
the output should contain "1 example, 1 failure"
expect empty templates to render when view path is changed at runtime (passes)
Given
a file named "spec/controllers/things_controller_spec.rb" with:
require "spec_helper"

describe ThingsController do
  describe "custom_action" do
    it "renders an empty custom_action template" do
      controller.prepend_view_path 'app/views'
      controller.append_view_path 'app/views'
      get :custom_action
      response.should render_template("custom_action")
      response.body.should == ""
    end
  end
end
When
I run rspec spec
Then
the examples should all pass
expect template to render when view path is changed at runtime (fails)
Given
a file named "spec/controllers/things_controller_spec.rb" with:
require "spec_helper"

describe ThingsController do
  describe "custom_action" do
    it "renders the custom_action template" do
      render_views
      controller.prepend_view_path 'app/views'
      get :custom_action
      response.should render_template("custom_action")
      response.body.should == ""
    end

    it "renders an empty custom_action template" do
      controller.prepend_view_path 'app/views'
      get :custom_action
      response.should render_template("custom_action")
      response.body.should == ""
    end
  end
end
When
I run rspec spec
Then
the output should contain "2 examples, 1 failure"

Last published about 4 years ago by dchelimsky.