#ruby-on-rails #ruby #rspec #inherited-resources
#ruby-on-rails #ruby #rspec #унаследованные ресурсы
Вопрос:
Я пытаюсь написать спецификацию для контроллера inherited_resources. Я решил имитировать всю интеграцию с базой данных, используя mock_model от rspec. К сожалению, я не могу написать спецификацию для действия создания и обновления, потому что я получаю следующую ошибку:https://gist.github.com/936947 Кто-нибудь может мне помочь с этим вопросом?
Ответ №1:
У меня была такая же проблема с использованием flexmock.
причина в том, что он не использует update_attributes
метод для принятия решения о маршрутизации. Он проверяет resource.errors
, является ли он пустым.
Итак, чтобы заставить его реагировать должным образом, нам также нужно будет смоделировать errors
метод.
Вот соответствующий код в строке 248 в библиотеке/inherited_resources/base_helpers.rb
def respond_with_dual_blocks(object, options, amp;block) #:nodoc:
args = (with_chain(object) << options)
case block.try(:arity)
when 2
respond_with(*args) do |responder|
blank_slate = InheritedResources::BlankSlate.new
if object.errors.empty?
block.call(responder, blank_slate)
else
block.call(blank_slate, responder)
end
end
when 1
respond_with(*args, amp;block)
else
options[:location] = block.call if block
respond_with(*args)
end
end
Комментарии:
1. Чем именно имитировать метод ошибок? Я столкнулся с точно такой же проблемой…
2. Ах да, я использовал stub_chain с
team.stub_chain(:errors, :empty?).and_return(false)
, и это работает отлично.
Ответ №2:
Сообщения о сбое касаются невозможности доступа к именованным маршрутам изнутри контроллера, поэтому я не уверен, что это имеет какое-либо отношение к mock_model. Вы пробовали те же примеры, используя реальные модели?