2009-10-23 17 views
10

Używam Cucumber z RSpec w projekcie Rails. Kiedy używać „wyprzedzeń natarcia” zadanie, mam następujące:Statystyki rake i ogórek

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

Więc rspec dodaje swoje statystyki (patrz model, widok, kontroler oraz specyfikacje pomocnika).
Ale nie mam tych ogórków. Jak mogę dodać je do moich statystyk rake?

Odpowiedz

10

RSpec tworzy plik lib/tasks/rspec.rake. I na nowo definiuje katalogi statystyk wewnątrz niego.

Na linii 108 tego pliku, zobaczysz:

# 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 

Wystarczy dodać ogórek wyposażony katalogu tam, tuż przed zakończeniem zadania.

# 
# 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 to było szybkie! Sprawdzam to. –

+0

Jakieś wskazówki, jak to zrobić, jeśli nie używasz rspec? – brad

+0

Czy możesz nam powiedzieć, jak to działa z najnowszym klejnotem rspec-2? Ponieważ nie ma zadania 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 

Kod:

# 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

Dlaczego małpa patch gem takiego? Będziesz musiał dodać poprawkę do niego za każdym razem, gdy aktualizujesz rspec-rails. Wystarczy rozszerzyć zadania lokalnie z mniej więcej tak:

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 

I FYI Lichtamberg i Damien MATHIEU to działa dobrze z RSpec 2. Jednakże te szyny są specyficzne zadania Rake ofc nie jest częścią samego klejnotu rspec, ale część klejnotów rspec-rails.

P.S. To wszystko zostało przetestowane z wersją 1.9.2p180 ruby ​​(2011-02-18 wersja 30909) [i686-linux], rails 3.0.8, rspec 2.6.0 i rspec-rails 2.6.1 i może lub nie może działać starsze wersje im.

0

Choć jest to bardzo stare pytanie, nadal jest pierwszy podczas googlowania „Szyny grabie wyprzedzeń ogórek”, a odpowiedzi są błędne lub nieaktualne .

Dla przyszłych pracowników Google, wszystko co musisz zrobić, to uruchomić

$ rails generate cucumber:install 

To stworzy niezbędne pliki, a konkretnie plik lib/tasks/cucumber.rake, który dodaje „Funkcje Ogórek” do wyjścia rake stats.