rspec: заглушить вызов вспомогательного метода шаблона из спецификации контроллера, используя render_views - PullRequest
6 голосов
/ 10 марта 2011

В Rails 3 / Rspec 2 я пытаюсь использовать функцию render_views спецификаций контроллера. Проблема, с которой я столкнулся, заключается в том, что мы только что установили гем пейджера kaminari , и я хочу отключить вызов <%= paginate @sites %> с моей точки зрения, поэтому мне не нужно вручную отключать все внутренние методы, которые kaminari определяет в коллекции для использования с paginate помощником.

Если бы это было в спецификации представления, я мог бы заглушить вспомогательный метод, вызвав view.stub(:paginate), но я не могу найти способ получить дескриптор объекта представления из спецификации контроллера (например, controller.view.stub(:paginate)) , Есть ли способ сделать это, или мы можем либо отключить render_views для этого метода, либо заглушить набор внутренних методов kaminari, которые нам не нужны (так как они должны быть покрыты тестами kaminari и могут измениться в будущие версии)?

describe SitesController do
  render_views

  def mock_site(stubs={})
    @mock_site ||= mock_model(Site, stubs).as_null_object
  end

  describe "GET index" do
    it "assigns all sites as @sites" do
      Site.stub_chain("enabled.ordered.page") {[mock_site]}
      # want to do something here like: controller.view.stub(:paginate)
      get :index
      assigns(:sites).should eq([mock_site])
    end
  end
end

1 Ответ

1 голос
/ 15 марта 2011

Либо я не смог найти правильного решения.

Возможно, вы захотите еще немного изучить controller.view_context.

На что я остановился (на данный момент), это патч обезьяны в rspec / support / kaminari.rb:

module Kaminari::ActionViewExtension::InstanceMethods
  def paginate(scope, options = {}, &block)
    puts "Should test pagination"
  end
end

Так что он молча проваливает пагинацию.

...