ruby-on-rails - rspec:使用 render_views 从 Controller 规范中 stub 模板的辅助方法调用

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

从 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/

相关文章:

ruby-on-rails-3 - 太阳黑子 - solr - 如何进行精确匹配

Git 没有使用 .gitignore 的内容

ruby-on-rails - FactoryGirl 中的 find_or_initialize_by

ruby-on-rails - 模拟用户登录 Rspec - 使用 Faraday 和 Github-Api Gems

ruby-on-rails - 使用 Mechanize 定位图像/javascript 链接

ruby-on-rails - Linkedin Gem 无法查看个人资料

ruby-on-rails - 在 View 中渲染 View

java - Hibernate CRUD 类似于 Ruby on Rails 的脚手架

linux - 如何降低 Linux 中 Rails 3 命令的用户时间与系统时间的比率

ruby-on-rails - RSpec 找不到我的 Controller 未初始化的常量