RSpec mock_model и унаследованные ресурсы

#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. Вы пробовали те же примеры, используя реальные модели?