如何使用RSpec测试渲染部分

Pav*_*vel 47 ruby rspec ruby-on-rails ruby-on-rails-3

我想根据某些条件测试渲染特定的部分.

例如,在模型显示操作视图中,show.html.erb我有:

<% if condition1 %>
 <%=  render :partial => "partial1" %>
<% else %>
 <%=  render :partial => "partial1" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我试过了:

response.should render_template("partial_name")
Run Code Online (Sandbox Code Playgroud)

但它告诉它呈现"显示"模板

期待<"partial1">但使用<"model/show,layouts/application">进行渲染

我做错了什么?

Ris*_*ogi 67

也试试这个

response.should render_template(:partial => 'partial_name')

  • 使用最新版本的rpec,它可能看起来更像是`expect(response).to render_template(:partial =>'_ partial_name')` (23认同)
  • 它可以工作,但如果您正在编写控制器规范,则需要指定`render_views`. (9认同)
  • `render_views`简单地在describe块中调用.describe OrganizationsController do; render_views; ...` (3认同)
  • 下面是关于`render_views`一些文档:https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/render-views (3认同)

swi*_*osz 28

最新的rspec版本建议使用expect语法而不是should:

expect(response).to render_template(partial: 'partial_name')
Run Code Online (Sandbox Code Playgroud)


Die*_*o D 5

如果要在控制器中进行测试,则应执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)

注意,我们需要render_views作为文档中报告的内容

这是将测试是否呈现“ _new_customer”部分的行:

expect(response).to render_template(partial: '_new_customer')
Run Code Online (Sandbox Code Playgroud)

您需要提供带有下划线的部分名称。

也要小心,因为在您的代码中IF和ELSE语句正在渲染同一件事。