2015-02-20 3 views
1

Я следую Руби Hartl на Rails учебник и не могу понять, почему следующий код продолжать давать мне эту ошибку:Rails RSpec ошибка render_template

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 

Я попытался использовать «страницу» вместо «ответа» на строке по ошибке, я также попытался использовать другую ссылку вместо «membres/show», но ничего не делает.

У кого-нибудь есть идея на этом этапе?

Редактировать

Это определенно «страница» я должен использовать вместо «ответ», но это все еще не ясно из сообщения об ошибке.

+0

Может быть, я не могу использовать render_template в спецификации запросов? –

+0

Я думаю, что 'render_template' больше подходит для спецификаций контроллера –

+0

Будет ли это новым с Rails 4? Поскольку учебник, который я следую, говорит, чтобы поставить этот тест в спецификацию запросов, и этот учебник посвящен Rails 3. –

ответ

1

Вот способ решить эту проблему.

Посмотрите в сообщении об ошибке на пути «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.

С вашим любимым текстовым редактором откройте« test_case.rb »как пользователь root, перейдите в указанную строку, которую он должен посмотреть например:

response.body 

Изменить это:

response.body if !response.nil? 

И вы должны быть в состоянии использовать render_template или assert_template без использования:

get 

или

post 

В моем случае, я могу использовать

visit 

Что не создает таким образом, сообщение об ошибке.