从 Rails 3/Rspec 2,我试图利用 render_views Controller 规范的特点。我遇到的问题是我们刚刚安装了 kaminari寻呼机 gem,我想删除 <%= paginate @sites %>
从我的角度调用,这样我就不必手动 stub kaminari 在集合上定义的所有内部方法,以便与 paginate
一起使用。 helper 。
如果这是在 View 规范中,我可以通过调用 view.stub(:paginate)
来删除辅助方法。 ,但我找不到任何方法从 Controller 规范(例如 controller.view.stub(:paginate)
)获取 View 对象的句柄。有什么方法可以做到这一点,或者我们的选择是禁用此方法的 render_views,还是 stub 一堆与我们无关的内部 kaminari 方法(因为它们应该被 kaminari 的测试覆盖,并且可能会在 future 版本)?
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
最佳答案
要么我找不到合适的解决方案。
可能你想调查 controller.view_context
多一点。
我(目前)解决的是 rspec/support/kaminari.rb 中的猴子补丁:
module Kaminari::ActionViewExtension::InstanceMethods
def paginate(scope, options = {}, &block)
puts "Should test pagination"
end
end
所以它默默地失败了分页。
关于ruby-on-rails - rspec:使用 render_views 从 Controller 规范中 stub 模板的辅助方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5262550/