メインコンテンツまでスキップ

stub_template の使用方法

主なビューでレンダリングされるパーシャルからビュースペックを分離するために、rspec-rails(2.2以降)では stub_template メソッドが提供されています。

存在しないテンプレートをスタブ化する

以下の内容で "spec/views/gadgets/list.html.erb_spec.rb" という名前のファイルが存在するとします。

require "rails_helper"

RSpec.describe "gadgets/list" do
it "renders the gadget partial for each gadget" do
assign(:gadgets, [
double(:name => "First"),
double(:name => "Second")
])
stub_template "gadgets/_gadget.html.erb" => "<%= gadget.name %><br/>"
render
expect(rendered).to match /First/
expect(rendered).to match /Second/
end
end

また、以下の内容で "app/views/gadgets/list.html.erb" という名前のファイルが存在するとします。

<%= render :partial => "gadget", :collection => @gadgets %>

rspec spec/views/gadgets/list.html.erb_spec.rb を実行すると、

すべての例がパスするはずです。

存在するテンプレートをスタブ化する

以下の内容で "spec/views/gadgets/edit.html.erb_spec.rb" という名前のファイルが存在するとします。

require "rails_helper"

RSpec.describe "gadgets/edit" do
before(:each) do
@gadget = assign(:gadget, Gadget.create!)
end

it "renders the form partial" do
stub_template "gadgets/_form.html.erb" => "This content"
render
expect(rendered).to match /This content/
end
end

rspec spec/views/gadgets/edit.html.erb_spec.rb を実行すると、

すべての例がパスするはずです。