rspec:使用render_views从控制器规范中存储模板的辅助方法调用

Gab*_*esy 6 rspec ruby-on-rails stub rspec2 ruby-on-rails-3

从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
Run Code Online (Sandbox Code Playgroud)

小智 1

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

也许您可能想controller.view_context进一步调查一下。

我现在解决的是 rspec/support/kaminari.rb 中的一个猴子补丁:

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

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