ruby-on-rails - 如何收集有关 erb 模板处理的 rcov 式信息?

标签 ruby-on-rails ruby rcov

我在从我的 rails 路由自动生成的一组测试中使用 rcov 来收集有关死代码(应用程序中从未调用的代码)的信息。这个设置已经为 Controller 、模型、助手和库代码生成了启发性的结果。不幸的是,rcov 不跟踪 erb 模板中的代码覆盖率,这是有道理的,因为 erb 模板在正常的执行概念上是一个非常具有挑战性的延伸。

Rails 本身可以生成关于在模板中引发异常的位置等的良好报告,所以我觉得这是可以收集的数据。

我目前正在尝试在 rcov 中找到我可以 Hook 的点,但是系统的 Ouroboros 性质使得很难清楚地看到正在发生的事情。我还怀疑有必要对 ERB 进行一些猴子修补。

如果您对方法或解决方案有任何想法,我将不胜感激。设置 View 功能后,我将清理此代码并将其作为开源 Rails 插件发布。

最佳答案

我实际上只是绝对需要 View 文件名,因为在大多数情况下它们将被完整执行。我的目的主要是识别未使用的部分或模板。以下代码将这些输出到屏幕。

module DeadCodeDetector                                                          
  module Template
    def set_extension_and_file_name_with_recording(use_full_path)                
      r = set_extension_and_file_name_without_recording(use_full_path)           
      puts "Included Template"
      puts filename
      puts "End Include"                                                         
      puts
      r                                                                          
    end                                                                          

    def self.included(base)
      base.class_eval do                                                         
        alias_method_chain :set_extension_and_file_name, :recording              
      end                                                                        
    end                                                                          
  end                                                                            
end

ActionView::Template.send(:include, DeadCodeDetector::Template)           

关于ruby-on-rails - 如何收集有关 erb 模板处理的 rcov 式信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039684/

相关文章:

javascript - rails 4 : View Doesn't Scroll when using One Page Scroll v1. 3

javascript - 如何从 Ruby on Rails 中的 url 捕获 anchor 值?

ruby-on-rails - 操作系统 : Rails Layer connect to Elasticache : Redis

ruby - 使用具有默认值的哈希

ruby - 如何在 Ruby 中查找所有引用的文件

ruby - 使用 JRuby 进行 RCov

ruby-on-rails - rcov中的 "total coverage"和 "code coverage"有什么区别?

ruby-on-rails - Heroku Rails 部署失败,错误为 "could not connect to server: Connection refused"

ruby-on-rails - 通过浏览器而不是控制台使用 Rails 跟踪/BPT 陷阱

ruby - 在 rcov 中,有没有办法找到哪个测试方法遍历了被测试的给定代码行?