如何使用RSpectesting渲染部分
我想根据一些条件testing渲染一个特定的部分。
例如,在模型显示动作视图show.html.erb
我有:
<% if condition1 %> <%= render :partial => "partial1" %> <% else %> <%= render :partial => "partial1" %> <% end %>
我试过了:
response.should render_template("partial_name")
但它告诉它呈现“显示”模板
期望<“partial1”>但使用<“model / show,layouts / application”>进行渲染
我做错了什么?
也试试这个
response.should render_template(:partial =>'partial_name')
最新的rspec版本build议使用expect
语法,而不是should
:
expect(response).to render_template(partial: 'partial_name')
如果你正在控制器内testing,你应该这样做:
RSpec.describe Users::RegistrationsController, type: :controller do describe "GET #new" do render_views it "render customer partial" do get :new expect(response).to render_template :new expect(response).to render_template(partial: '_new_customer') end end end
请注意,我们需要将render_views报告为文档 。
这是testing是否呈现“_new_customer”部分的行:
expect(response).to render_template(partial: '_new_customer')
您需要提供具有初始下划线的部分的名称。
另外要小心,因为在你的代码中,IF和ELSE语句呈现相同的东西。
而不是上面提到的解决scheme,你可以select检查部分呈现的html是否存在。 例如
response.body.should have_tag("div#foo")