【问题标题】:rspec: Stub a template's helper method call from a controller spec using render_viewsrspec:使用 render_views 从控制器规范中存根模板的辅助方法调用
【发布时间】:2011-03-10 16:19:35
【问题描述】:

从 Rails 3 / Rspec 2 开始,我正在尝试利用控制器规范的 render_views 功能。我遇到的问题是我们刚刚安装了 kaminari 寻呼机 gem,我想从我的视图中删除 <%= 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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec rspec2 stub


    【解决方案1】:

    要么我找不到合适的解决方案。

    您可能想进一步调查controller.view_context

    我(目前)解决的是 rspec/support/kaminari.rb 中的猴子补丁:

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

    所以它默默地失败了分页。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 2011-08-03
      • 2021-05-20
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多