2010-10-04 3 views
3

Я столкнулся с проблемой с RSpec и контроллерыпроблема для RSpec действия обновления с помощью направляющих 3

Я spec'ing действие обновления, поэтому, чтобы сделать это я называю следующий код:

put :update, :id => "1", :ntp => {:name=>'myservah'} 

Мой контроллер имеет следующий код:

def update 
if @ntp.update_attributes(params[:ntp]) 
    flash.now[:notice] = "Successfully updated ntp." 
else 
    flash.now[:error] = ((errors_to_a(@ntp)*'.<br />')+'.') 
end 
render :partial => 'update' 
end 

, и я получаю следующее сообщение об ошибке:

Ошибка/Ошибка: put: update,: id => "1",: ntp => {: name => 'myservah'} Отсутствует частичный ntps/update с помощью {: handlers => [: erb,: rjs,: builder,: rhtml,: rxml],: formats => [: html],: locale => [: en,: en]} в пути просмотра "#"

Мой вопрос: должен ли я сказать, какой обработчик у меня есть? Сегодня моя часть называется «_update.js.erb».

Кстати, мой код работает, я визуализация «JS» версии обновления, так как я просто запустить некоторые скрипты

ответ

13

Rails определяет формат ответ от некоторых параметров запроса, включая HTTP Accept заголовка запроса (интеллектуальный гадание), параметр :format или расширение страницы.

Если не указано, Rails по умолчанию задает формат запроса :html.

Как вы можете видеть, ваш запрос по умолчанию равен :html, что означает, что Rails пытается отобразить шаблон _update.html.erb. Для устранения проблемы можно внести несколько изменений:

  1. Всегда указывайте формат запроса в тесте, если он отличается от html.

    # emulate a js request 
    put :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js 
    

    Если действие предназначено для ответа на запрос AJAX, запустить тест, используя метод xhr

    # emulate an XHR request 
    xhr :put, :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js 
    
  2. Возврат 406 с любым не-Js ответ. Изменение render :partial => 'update' в

    respond_to do |format| 
        format.js { render :partial => 'update' } 
        format.any { head 406 } 
    end 
    
+0

я должен был изменить только контроллер и добавить формат .. спасибо за «406» кончик .. КСТАТИ синтаксис HXR, по крайней мере, в RSpec 2.0.0 неправильно. –

+0

Извините, это 'xhr'. Я исправил ответ. –

Смежные вопросы