使用 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
则 示例应该全部通过。