ビュースペック
ビュースペックは type: :view とマークされます
または config.infer_spec_type_from_file_location! を設定している場合は
spec/views に配置することで指定します。
特定のコントローラを呼び出さずに ビューテンプレートの内容をテストするために使用します。 通常、以下の3つのステップに従います。
(assign(:widget, Widget.new)  # sets @widget = Widget.new in the view template
  render
  expect(rendered).to match(/text/)
- 
assignメソッドを使用してビュー内のインスタンス変数を設定します。
- 
renderメソッドを使用してビューをレンダリングします。
- 
レンダリングされたテンプレートに対して期待値を設定します。 
ビュースペックは指定されたビューファイルをレンダリングします
次の内容で "spec/views/widgets/index.html.erb_spec.rb" という名前のファイルがあるとします:
require "rails_helper"
RSpec.describe "widgets/index" do
  it "displays all the widgets" do
    assign(:widgets, [
      Widget.create!(:name => "slicer"),
      Widget.create!(:name => "dicer")
    ])
    render
    expect(rendered).to match /slicer/
    expect(rendered).to match /dicer/
  end
end
rspec spec/views を実行すると
すべての例がパスするはずです。
ビュースペックには before ブロックとネストができます
次の内容で "spec/views/widgets/index.html.erb_spec.rb" という名前のファイルがあるとします:
require "rails_helper"
RSpec.describe "widgets/index" do
  context "with 2 widgets" do
    before(:each) do
      assign(:widgets, [
        Widget.create!(:name => "slicer"),
        Widget.create!(:name => "dicer")
      ])
    end
    it "displays both widgets" do
      render
      expect(rendered).to match /slicer/
      expect(rendered).to match /dicer/
    end
  end
end
rspec spec/views を実行すると
すべての例がパスするはずです。
ビュースペックは明示的にテンプレートをレンダリングできます
次の内容で "spec/views/widgets/widget.html.erb_spec.rb" という名前のファイルがあるとします:
require "rails_helper"
RSpec.describe "rendering the widget template" do
  it "displays the widget" do
    assign(:widget, Widget.create!(:name => "slicer"))
    render :template => "widgets/widget"
    expect(rendered).to match /slicer/
  end
end
次の内容で "app/views/widgets/widget.html.erb" という名前のファイルがあるとします:
<h2><%= @widget.name %></h2>
rspec spec/views を実行すると
すべての例がパスするはずです。
ビュースペックはレイアウト内のテンプレートをレンダリングできます
次の内容で "spec/views/widgets/widget.html.erb_spec.rb" という名前のファイルがあるとします:
require "rails_helper"
RSpec.describe "rendering the widget template" do
  context "with the inventory layout" do
    it "displays the widget" do
      assign(:widget, Widget.create!(:name => "slicer"))
      render :template => "widgets/widget", :layout => "layouts/inventory"
      expect(rendered).to match /slicer/
    end
  end
end
次の内容で "app/views/widgets/widget.html.erb" という名前のファイルがあるとします:
<h2><%= @widget.name %></h2>
次の内容で "app/views/layouts/inventory.html.erb" という名前のファイルがあるとします:
<%= yield %>
rspec spec/views を実行すると
すべての例がパスするはずです。
ビュースペックにはフォーマットとハンドラを含む説明ができます
次の内容で "spec/views/widgets/widget.xml.erb_spec.rb" という名前のファイルがあるとします:
require "rails_helper"
RSpec.describe "widgets/widget.html.erb" do
  it "renders the HTML template" do
    render
    expect(rendered).to match /HTML/
  end
end
RSpec.describe "widgets/widget.xml.erb" do
  it "renders the XML template" do
    render
    expect(rendered).to match /XML/
  end
end
次の内容で "app/views/widgets/widget.html.erb" という名前のファイルがあるとします:
HTML
次の内容で "app/views/widgets/widget.xml.erb" という名前のファイルがあるとします:
XML
When I run rspec spec/views
Then the examples should all pass.
ビュースペックはローカル変数を使用してテンプレートをレンダリングできます
Given a file named "spec/views/widgets/_widget.html.erb_spec.rb" with:
require "rails_helper"
RSpec.describe "widgets/index" do
  it "displays the widget" do
    widget = Widget.create!(:name => "slicer")
    render :locals => {:widget => widget}
    expect(rendered).to match /slicer/
  end
end
And a file named "app/views/widgets/index.html.erb" with:
<h3><%= widget.name %></h3>
When I run rspec spec/views
Then the examples should all pass.
ビュースペックはパーシャル内のローカル変数をレンダリングできます
Given a file named "spec/views/widgets/_widget.html.erb_spec.rb" with:
require "rails_helper"
RSpec.describe "rendering locals in a partial" do
  it "displays the widget" do
    widget = Widget.create!(:name => "slicer")
    render :partial => "widgets/widget", :locals => {:widget => widget}
    expect(rendered).to match /slicer/
  end
end
And a file named "app/views/widgets/_widget.html.erb" with:
<h3><%= widget.name %></h3>
When I run rspec spec/views
Then the examples should all pass.
ビュースペックは暗黙のパーシャル内のローカル変数をレンダリングできます
Given a file named "spec/views/widgets/_widget.html.erb_spec.rb" with:
require "rails_helper"
RSpec.describe "rendering locals in a partial" do
  it "displays the widget" do
    widget = Widget.create!(:name => "slicer")
    render "widgets/widget", :widget => widget
    expect(rendered).to match /slicer/
  end
end
And a file named "app/views/widgets/_widget.html.erb" with:
<h3><%= widget.name %></h3>
When I run rspec spec/views
Then the examples should all pass.
ビュースペックはテキストをレンダリングできます
Given a file named "spec/views/widgets/direct.html.erb_spec.rb" with:
require "rails_helper"
RSpec.describe "rendering text directly" do
  it "displays the given text" do
    render :plain => "This is directly rendered"
    expect(rendered).to match /directly rendered/
  end
end
When I run rspec spec/views
Then the examples should all pass.
ビュースペックはヘルパーメソッドをスタブ化できます
Given a file named "app/helpers/application_helper.rb" with:
module ApplicationHelper
  def admin?
    false
  end
end
And a file named "app/views/secrets/index.html.erb" with:
<%- if admin? %>
  <h1>Secret admin area</h1>
<%- end %>
And a file named "spec/views/secrets/index.html.erb_spec.rb" with:
require 'rails_helper'
RSpec.describe 'secrets/index' do
  before do
    allow(view).to receive(:admin?).and_return(true)
  end
  it 'checks for admin access' do
    render
    expect(rendered).to match /Secret admin area/
  end
end
When I run rspec spec/views/secrets
Then the examples should all pass.
ビュースペックはrequest.path_parametersのキーにシンボルを使用してRailsスタイルに一致させます
Given a file named "spec/views/widgets/index.html.erb_spec.rb" with:
require "rails_helper"
RSpec.describe "controller.request.path_parameters" do
  it "matches the Rails environment by using symbols for keys" do
    [:controller, :action].each { |k| expect(controller.request.path_parameters.keys).to include(k) }
  end
end
When I run rspec spec/views
Then the examples should all pass.
追加のパラメータを必要としないビュースペックアクションでは、request.fullpathが設定されます
Given a file named "spec/views/widgets/index.html.erb_spec.rb" with:
  require "rails_helper"
  RSpec.describe "widgets/index" do
    it "has a request.fullpath that is defined" do
      expect(controller.request.fullpath).to eq widgets_path
    end
  end
When I run rspec spec/views
Then the examples should all pass.
開発者が追加のパラメータを指定した場合、追加のパラメータが必要なビュースペックのアクションでは request.fullpath が設定される
Given a file named "spec/views/widgets/show.html.erb_spec.rb" with:
  require "rails_helper"
  RSpec.describe "widgets/show" do
    it "displays the widget with id: 1" do
      widget = Widget.create!(:name => "slicer")
      controller.extra_params = { :id => widget.id }
      expect(controller.request.fullpath).to eq widget_path(widget)
    end
  end
When I run rspec spec/views
Then the examples should all pass.