2009-10-23 9 views
10

Sto usando Cucumber con RSpec in un progetto Rails. Quando uso il compito "statistiche rastrello", ottengo il seguente:Rake stats e 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 

Così rspec aggiunge le sue statistiche (vedere il modello, vista, controller e le specifiche di supporto).
Ma io non ho i cetrioli. Come potrei aggiungerli alle mie statistiche di rake?

risposta

10

RSpec crea un file lib/tasks/rspec.rake. E ridefinisce le directory delle statistiche al suo interno.

Alla linea 108 di quel file, vedrete:

# 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 

Hai solo bisogno di aggiungere il cetriolo dispone directory lì, proprio prima della fine del compito.

# 
# 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

Woh è stato veloce! Lo sto verificando. –

+0

Qualche consiglio su come eseguire questa operazione se non stai utilizzando rspec? – brad

+0

Puoi dirci come funziona con l'ultima gemma rspec-2? Perché non c'è un compito di 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 

Codice:

# 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

Perché scimmia rattoppare la gemma del genere? Dovrai aggiungere la tua correzione ogni volta che aggiorni rspec-rails. Basta estendere il compito a livello locale con qualcosa di simile:

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 

E FYI Lichtamberg e Damien MATHIEU questo funziona bene con RSpec 2. Tuttavia questi compiti rake specifici rotaie sono OFC non fanno parte della gemma RSpec in sé, ma una parte della gemma rspec-rails.

P.S. Tutto questo è stato testato con ruby ​​1.9.2p180 (2011-02-18 revisione 30909) [i686-linux], rails 3.0.8, rspec 2.6.0 e rspec-rails 2.6.1 e potrebbe o non potrebbe funzionare versioni precedenti di loro.

0

Anche se questo è estremamente vecchia questione, è ancora prima quando googling "rotaie rastrello statistiche cetriolo" e le risposte sono fuorvianti o obsoleti .

Per Googler futuri, tutto quello che dovete fare è eseguire

$ rails generate cucumber:install 

Questo creerà i file necessari, e in particolare il file lib/tasks/cucumber.rake, che aggiunge "cetriolo Funzioni" al rake stats uscita.

Problemi correlati