如何使用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")