使用 render_views

你可以在任何单个组或全局中,通过 `render_views` 声明,告诉控制器示例组渲染视图。

在单个组中直接使用 `render_views`

给定一个名为“spec/controllers/widgets_controller_spec.rb”的文件,其中包含:

require "rails_helper"

RSpec.describe WidgetsController, type: :controller do
  render_views

  describe "GET index" do
    it "has a widgets related heading" do
      get :index
      expect(response.body).to match /<h1>.*widgets/im
    end
  end
end

我运行 `rspec spec`

那么这些示例应该全部通过。

在嵌套组中使用 `render_views` 打开和关闭

给定一个名为“spec/controllers/widgets_controller_spec.rb”的文件,其中包含:

require "rails_helper"

RSpec.describe WidgetsController, type: :controller do
  context "with render_views" do
    render_views

    describe "GET index" do
      it "renders the actual template" do
        get :index
        expect(response.body).to match /<h1>.*widgets/im
      end
    end

    context "with render_views(false) nested in a group with render_views" do
      render_views false

      describe "GET index" do
        it "renders the RSpec generated template" do
          get :index
          expect(response.body).to eq("")
        end
      end
    end
  end

  context "without render_views" do
    describe "GET index" do
      it "renders the RSpec generated template" do
        get :index
        expect(response.body).to eq("")
      end
    end
  end

  context "with render_views again" do
    render_views

    describe "GET index" do
      it "renders the actual template" do
        get :index
        expect(response.body).to match /<h1>.*widgets/im
      end
    end
  end
end

我运行 `rspec spec --order defined --format documentation`

那么输出应该包含

WidgetsController
  with render_views
    GET index
      renders the actual template
    with render_views(false) nested in a group with render_views
      GET index
        renders the RSpec generated template
  without render_views
    GET index
      renders the RSpec generated template
  with render_views again
    GET index
      renders the actual template

全局使用 `render_views`

给定一个名为“spec/support/render_views.rb”的文件,其中包含:

RSpec.configure do |config|
  config.render_views
end

以及一个名为“spec/controllers/widgets_controller_spec.rb”的文件,其中包含:

require "rails_helper"
require "support/render_views"

RSpec.describe WidgetsController, type: :controller do
  describe "GET index" do
    it "renders the index template" do
      get :index
      expect(response.body).to match /<h1>.*widgets/im
    end
  end
end

我运行 `rspec spec`

那么这些示例应该全部通过。