2009-10-23 13 views
10

Ich verwende Gurke mit RSpec in einem Rails-Projekt. Wenn ich die „Rake Statistik“ Aufgabe verwenden, erhalte ich folgendes:Rake-Statistik und Gurke

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

So rspec die Statistik ergänzt (siehe Modell, Ansicht, Controller und Helfer Spezifikationen).
Aber ich habe keine Gurken. Wie könnte ich sie zu meinen Rake-Statistiken hinzufügen?

Antwort

10

RSpec erstellt eine lib/tasks/rspec.rake Datei. Und definiert die Statistik-Verzeichnisse darin neu.

Auf der Linie 108 der Datei werden Sie sehen:

# 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 

Sie müssen nur Ihre Gurke hinzufügen kennzeichnet Verzeichnis dort, kurz vor dem Ende der Aufgabe.

# 
# 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 auf das war schnell! Ich überprüfe das. –

+0

Gibt es Tipps, wie Sie dies tun können, wenn Sie rspec nicht verwenden? – brad

+0

Kannst du uns sagen, wie das mit dem letzten rspec-2 Juwel funktioniert? Weil es keine Rake-Aufgabe gibt – 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 

Code:

# 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

Warum so den Edelstein Affe Patch? Sie müssen Ihren Fix dafür jedes Mal hinzufügen, wenn Sie rspec-rails aktualisieren. erstrecken sich nur die Aufgabe, vor Ort mit etwas wie folgt aus:

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 

Und FYI Lichtamberg und Damien MATHIEU das funktioniert ganz gut mit rspec 2. Allerdings sind diese Schienen spezifischen Rake Aufgaben sind OFC nicht Teil des rspec Juwel selbst, sondern ein Teil der rspec-rails gem.

P.S. Dies alles wurde mit Ruby 1.9.2p180 (2011-02-18 Revision 30909) [i686-linux], Rails 3.0.8, rspec 2.6.0 und rspec-rails 2.6.1 getestet und es funktioniert möglicherweise nicht oder ältere Versionen von Sie.

0

Obwohl dies eine extrem alte Frage funktioniert, ist es nach wie vor erste ist, wenn „Schienen Rake Statistiken Gurke“ googeln und die Antworten sind irreführend oder veraltet .

Für zukünftige Googler, alles, was Sie diesen

$ rails generate cucumber:install 

schaffen wird, die notwendigen Dateien und insbesondere die lib/tasks/cucumber.rake-Datei, die ergänzt: „Gurken-Features“ auf den rake stats Ausgang tun müssen, ist

laufen.