Как собрать информацию в стиле rcov при обработке шаблонов erb? - PullRequest
4 голосов
/ 24 июня 2009

Я использую rcov для набора тестов, автоматически сгенерированных из моих маршрутов rails, для сбора информации о мертвом коде (код, который никогда не вызывается в приложении). Эта настройка уже генерирует полезные результаты для контроллеров, моделей, помощников и кода lib. К сожалению, rcov не отслеживает покрытие кода в шаблонах erb, что имеет смысл, поскольку шаблонирование erb является довольно сложной задачей для нормальной концепции исполнения.

Сам Rails может генерировать хорошие отчеты о том, где в шаблонах возникают исключения и тому подобное, поэтому я чувствую, что это данные, которые можно собирать.

В настоящее время я пытаюсь найти точки в rcov, к которым я могу подключиться, но природа системы Уроборос мешает ясно видеть происходящее. Я также подозреваю, что понадобится некоторое количество мартышек ERB.

Если у вас есть идеи для подходов или решений, я был бы признателен. Как только я настрою функциональность вида, я очищаю этот код и выпускаю его как плагин Rails с открытым исходным кодом.

1 Ответ

1 голос
/ 24 июня 2009

Мне на самом деле только нужно имя файла представления, так как в большинстве случаев они будут выполняться полностью. Моя цель в основном определить неиспользованные партиалы или шаблоны. Следующий код выводит их на экран.

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)           
...