Как написать функциональный тест для действия обновления в контроллере? - PullRequest
0 голосов
/ 29 июля 2010

С такими действиями, как :show и :edit, я могу просто http GET их. Но так как у действия :update нет шаблона, я не могу выдать GET без жалобы на отсутствующий шаблон. Это имеет смысл, поэтому я попытался напрямую вызвать @controller.update в моем тесте, но я получил ошибку в блоке respond_to:

NoMethodError: undefined method `parameters' for nil:NilClass

Как мне указать запрашиваемый формат :html? Я передаю хэш параметра для атрибутов модели, FWIW. Спасибо за любой совет.

Edit: С тех пор я попытался вызвать @ controller.update (после установки params []) в консоли, и та ошибка, процитированная выше, всплыла отсюда: /actionpack-2.3.8/lib/action_controller/mime_responds.rb

Я также попробовал PUT вместо GET, но все еще получил "Missing Template update.erb".

Кроме того, мне удалось выяснить, что эта ошибка отсутствующего шаблона вызвана наличием чего-либо кроме перенаправления или визуализации в блоке кода, помеченном ЗДЕСЬ:

respond_to do |format|
  if @model.update_attributes(params[:model])
     flash[:notice] = 'note!'
     format.html { **HERE** }
     ...

У меня есть вызов метода, который является условным для перенаправления в нужное место. Я могу, в принципе, понять, почему он может искать шаблон для рендеринга, поскольку он может не знать, что есть перенаправление дальше вниз по течению, но я не понимаю, почему мое веб-приложение не работает на том же уровне. ошибка как мой функциональный тест.

Ответы [ 2 ]

0 голосов
/ 29 июля 2010
  • Вы должны звонить put :update в своем тесте.Если у вас есть код, такой как @my_model.update_attributes(params[:my_model]) в контроллере, тогда вы будете вызывать put :update, :id => <whatever>, :my_model => {:foo => 'bar'} в своем тесте.
  • :html - это формат по умолчанию, поэтому вам не нужно его указывать.Если бы вы действительно хотели, вы могли бы сделать put :update, :format => :html.Но опять же, не обязательно.
  • Как сказала Эмили, это params, а не parameters, так что вы можете получить доступ к неправильному хешу

В целом этот вопрос может использовать еще несколькоподробно о том, что вы пытаетесь сделать и как выглядит ваш текущий код.

0 голосов
/ 29 июля 2010

Я думаю, что ваша основная проблема в том, что метод обновления обычно вообще не является запросом get.Вы должны post выполнить это действие.

Ошибка, которую вы получаете, звучит так, будто вы столкнулись с более серьезными проблемами.Rails использует params, а не parameters, так что это довольно странная ошибка.Я не знаю, связано ли это с вызовом метода непосредственно на контроллере и, следовательно, с отсутствием какого-либо другого контекста, который ожидает Rails, или с дополнительной проблемойЕсли переключение на post не помогает, обновите ваш вопрос, указав текст вашего теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...