2011-03-10 55 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 

所以它靜靜地失敗分頁。

相關問題