Rails rspec render_template 错误

Rails rspec render_template error

我在 Rails 教程中关注 Hartl 的 Ruby,但无法弄清楚为什么以下代码一直给我这个错误:

Failure/Error: expect(response).to render_template("membres/show")
     NoMethodError:
       undefined method `body' for nil:NilClass

代码:

require 'rails_helper'

RSpec.describe "Membres", :type => :request do  

  include Capybara::DSL

  describe "une inscription" do
    describe "ratée" do
      it "ne devrait pas créer un nouvel utilisateur" do
        visit signup_path
        fill_in "Nom",          :with => ""
        fill_in "Email",        :with => ""
        fill_in "Password",     :with => ""
        fill_in "Confirmation", :with => ""
        click_button "Inscription"
        expect(response).to render_template("membres/show")
        expect(response).to have_tag("div#error_explanation")
      end
    end
  end
end

我尝试在错误的行上使用 "page" 而不是 "response",我也尝试使用其他 link 而不是 "membres/show" 但没有任何效果。

现在有人知道吗?

编辑

我应该使用 "page" 而不是 "response",但这仍然不能清除错误消息。

这是解决该问题的方法。

在您的错误消息中查找 "test_case.rb" 的路径和错误行:

NoMethodError:
       undefined method `body' for nil:NilClass
     # /var/lib/gems/1.9.1/gems/actionpack-4.2.0/lib/action_controller/test_case.rb:111:in `assert_template'
     # ./spec/requests/membres_spec.rb:21:in `block (5 levels) in <top (required)>'
     # ./spec/requests/membres_spec.rb:23:in `block (4 levels) in <top (required)>'

在我的例子中,文件位于“/var/lib/gems/1.9.1/gems/actionpack-4.2.0/lib/action_controller/”,错误行是 111.

使用您最喜欢的文本编辑器,以 root 身份打开 "test_case.rb",转到指定的行,它应该如下所示:

response.body

改为:

response.body if !response.nil?

并且您应该可以使用 render_template 或 assert_template 而无需使用:

get

post

就我而言,我可以使用

visit

这不会创建 "response" 对象,因此会出现错误消息。