2009-10-23 10 views
10

Estoy usando Cucumber with RSpec en un proyecto de Rails. Cuando uso la tarea "estadísticas de rake", me sale el siguiente:Rake stats and Cucumber

+----------------------+-------+-------+---------+---------+-----+-------+ 
| Name     | Lines | LOC | Classes | Methods | M/C | LOC/M | 
+----------------------+-------+-------+---------+---------+-----+-------+ 
| Controllers   | 948 | 761 |  21 |  87 | 4 |  6 | 
| Helpers    | 212 | 175 |  0 |  24 | 0 |  5 | 
| Models    | 912 | 741 |  28 |  72 | 2 |  8 | 
| Libraries   | 305 | 211 |  1 |  25 | 25 |  6 | 
| Model specs   | 978 | 797 |  0 |  1 | 0 | 795 | 
| View specs   | 270 | 227 |  0 |  0 | 0 |  0 | 
| Controller specs  | 1144 | 944 |  0 |  4 | 0 | 234 | 
| Helper specs   | 154 | 116 |  0 |  0 | 0 |  0 | 
+----------------------+-------+-------+---------+---------+-----+-------+ 
| Total    | 4923 | 3972 |  50 |  213 | 4 | 16 | 
+----------------------+-------+-------+---------+---------+-----+-------+ 
    Code LOC: 1888  Test LOC: 2084  Code to Test Ratio: 1:1.1 

Así rspec añade sus estadísticas (véase el modelo, vista, controlador y especificaciones helper).
Pero no tengo los de pepino. ¿Cómo podría agregarlos a mis estadísticas de rake?

Respuesta

10

RSpec crea un archivo lib/tasks/rspec.rake. Y redefine los directorios de estadísticas dentro de él.

En la línea 108 de ese archivo, verá:

# Setup specs for stats 
task :statsetup do 
    require 'code_statistics' 
    ::STATS_DIRECTORIES << %w(Model\ specs spec/models) if File.exist?('spec/models') 
    ::STATS_DIRECTORIES << %w(View\ specs spec/views) if File.exist?('spec/views') 
    .... 
end 

Sólo tiene que añadir su pepino funciones de Directorio ahí, justo antes del final de la tarea.

# 
# Adding Cucumber features to the stats 
# 
::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features') 
::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features') 
+0

¡Eso fue rápido! Estoy comprobando eso. –

+0

¿Algún consejo sobre cómo hacer esto si no está utilizando rspec? – brad

+0

¿Podría decirnos cómo funciona eso con la última joya rspec-2? Porque no hay tarea de rake – Lichtamberg

0
I copy paste my custom set up for RSpec 1: 

+----------------------+-------+-------+---------+---------+-----+-------+ 
| Name     | Lines | LOC | Classes | Methods | M/C | LOC/M | 
+----------------------+-------+-------+---------+---------+-----+-------+ 
| Controllers   | 1110 | 791 |  39 |  92 | 2 |  6 | 
| Helpers    | 449 | 373 |  0 |  39 | 0 |  7 | 
| Models    | 1986 | 1338 |  25 |  111 | 4 | 10 | 
| Libraries   | 652 | 479 |  11 |  41 | 3 |  9 | 
| Views    | 2911 | 2730 |  0 |  0 | 0 |  0 | 
| Static CSS   | 2776 | 2174 |  0 |  0 | 0 |  0 | 
| App javascript  | 16 | 14 |  0 |  0 | 0 |  0 | 
| Model specs   | 517 | 289 |  0 |  2 | 0 | 142 | 
| Helper specs   | 27 | 22 |  0 |  0 | 0 |  0 | 
| Library specs  | 31 | 24 |  0 |  0 | 0 |  0 | 
| Cucumber features | 907 | 657 |  3 |  13 | 4 | 48 | 
+----------------------+-------+-------+---------+---------+-----+-------+ 
| Total    | 11382 | 8891 |  78 |  298 | 3 | 27 | 
+----------------------+-------+-------+---------+---------+-----+-------+ 
    Code LOC: 7899  Test LOC: 992  Code to Test Ratio: 1:0.1 

Código:

# here is my set up 
    task :statsetup do 
     require 'code_statistics' 

     class CodeStatistics 
     alias calculate_statistics_orig calculate_statistics 

     def calculate_statistics 
      @pairs.inject({}) do |stats, pair| 
      if 3 == pair.size 
       stats[pair.first] = calculate_directory_statistics(pair[1], pair[2]); stats 
      else 
       stats[pair.first] = calculate_directory_statistics(pair.last); stats 
      end 
      end 
     end 
     end 
     # http://www.pervasivecode.com/blog/2007/06/28/hacking-rakestats-to-get-gross-loc/ 
     ::STATS_DIRECTORIES << ['Views', 'app/views', /\.(rhtml|erb|rb)$/] 
     ::STATS_DIRECTORIES << ['Static CSS', 'public/stylesheets', /\.css$/] 
     ::STATS_DIRECTORIES << ['App javascript', 'public/javascripts', /application.js$/] 

     # RSpec default 
     ::STATS_DIRECTORIES << %w(Model\ specs spec/models) if File.exist?('spec/models') 
     ::STATS_DIRECTORIES << %w(View\ specs spec/views) if File.exist?('spec/views') 
     ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers) if File.exist?('spec/controllers') 
     ::STATS_DIRECTORIES << %w(Helper\ specs spec/helpers) if File.exist?('spec/helpers') 
     ::STATS_DIRECTORIES << %w(Library\ specs spec/lib) if File.exist?('spec/lib') 
     ::STATS_DIRECTORIES << %w(Routing\ specs spec/routing) if File.exist?('spec/routing') 
     ::STATS_DIRECTORIES << %w(Integration\ specs spec/integration) if File.exist?('spec/integration') 
     ::CodeStatistics::TEST_TYPES << "Model specs" if File.exist?('spec/models') 
     ::CodeStatistics::TEST_TYPES << "View specs" if File.exist?('spec/views') 
     ::CodeStatistics::TEST_TYPES << "Controller specs" if File.exist?('spec/controllers') 
     ::CodeStatistics::TEST_TYPES << "Helper specs" if File.exist?('spec/helpers') 
     ::CodeStatistics::TEST_TYPES << "Library specs" if File.exist?('spec/lib') 
     ::CodeStatistics::TEST_TYPES << "Routing specs" if File.exist?('spec/routing') 
     ::CodeStatistics::TEST_TYPES << "Integration specs" if File.exist?('spec/integration') 

     # Cuke 
     ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features') 
     ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features') 

    end 
2

Por qué mono parche de la gema de esa manera? Deberá agregar su solución cada vez que actualice rspec-rails. Sólo extender la tarea a nivel local con algo como esto:

echo "# Adding Cucumber features to be reported by the command: 
# rake stats 
# But e.g. in production environment we probably don't have rspec-rails, nor it's 
# statsetup task, we could extend. So lets check if stasetup is available and only 
# then extend it. If it isn't then just do nothing. 
if Rake::Task.task_defined? 'spec:statsetup' 
    Rake::Task['spec:statsetup'].enhance do 
    require 'rails/code_statistics' 
    ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features') 
    ::CodeStatistics::TEST_TYPES << 'Cucumber features' if File.exist?('features') 
    end 
end" > lib/tasks/cucumber_stats.rake 

Y FYI Lichtamberg y Damien MATHIEU esto funciona muy bien con rspec 2. Sin embargo, estos carriles tareas específicas rastrillo son OFC no forma parte de la propia joya rspec, pero una parte de la gema rspec-rails.

P.S. Todo esto se probó con ruby ​​1.9.2p180 (2011-02-18 revisión 30909) [i686-linux], rieles 3.0.8, rspec 2.6.0 y rspec-rails 2.6.1 y puede que funcione o no las versiones anteriores de ellos.

0

Aunque se trata de una muy vieja pregunta, sigue siendo en primer lugar cuando buscando en Google "rieles rastrillo estadísticas pepino" y las respuestas son engañosas o no actualizados .

Para los futuros empleados de Google, todo lo que necesita hacer es ejecutar

$ rails generate cucumber:install 

Esto creará los archivos necesarios, y en concreto el archivo lib/tasks/cucumber.rake, que añade "Pepino" Características de la salida rake stats.