2011-03-10 51 views
6

从Rails 3/Rspec 2开始,我试图利用控制器规格的render_views功能。我遇到的问题是,我们刚刚安装了kaminari寻呼机gem,并且我想从我的视图中删除<%= paginate @sites %>调用,所以我不必手动将kaminari定义的所有内部方法收集使用paginate帮手。rspec:使用render_views从控制器规范中删除模板的辅助方法调用

如果这是在视图规范中,我可以通过调用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

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

也许您可能想要调查controller.view_context多一点。

我(现在)与定居在rspec的/支持/ kaminari.rb猴子补丁:

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

所以它静静地失败分页。

相关问题