проблема с обновлением действия rspec с использованием rails 3 - PullRequest
3 голосов
/ 04 октября 2010

У меня проблема с rspec и контроллерами

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

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

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

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

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

Кстати, мой код работает, я рендеринг "js" версии обновления, так как я просто запускаю некоторые скрипты

1 Ответ

13 голосов
/ 04 октября 2010

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
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...