2009-10-23 9 views
10

J'utilise le concombre avec RSpec dans un projet Rails. Lorsque j'utilise la tâche « râteau stats », je reçois le texte suivant:Rake stats et le concombre

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

Alors rspec ajoute ses statistiques (voir le modèle, vue, contrôleur et spécifications d'aide).
Mais je n'ai pas les concombres. Comment pourrais-je les ajouter à mes statistiques de rake? RSpec crée un fichier lib/tasks/rspec.rake

Répondre

10

Et redéfinit les répertoires de statistiques à l'intérieur de celui-ci.

À la ligne 108 de ce fichier, vous verrez:

# 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 

Vous avez juste besoin d'ajouter votre concombre caractéristiques, il répertoire, juste avant la fin de la tâche.

# 
# 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 c'était rapide! Je vérifie ça. –

+0

Des conseils sur la façon de procéder si vous n'utilisez pas rspec? – brad

+0

Pourriez-vous nous dire comment cela fonctionne avec la dernière gemme rspec-2? Parce qu'il n'y a pas de tâche 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 

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

Pourquoi le singe patcher le bijou comme ça? Vous devrez ajouter votre correctif à chaque fois que vous mettez à jour rspec-rails. Il suffit d'étendre la tâche localement avec quelque chose comme ceci:

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 

Et Pour votre information Lichtamberg et Damien MATHIEU cela fonctionne très bien avec rspec 2. Cependant, ces rails tâches de râteau spécifiques sont ofc ne fait pas partie de la gemme rspec lui-même, mais une partie de la gemme rspec-rails.

P.S. Tout cela a été testé avec ruby ​​1.9.2p180 (2011-02-18 révision 30909) [i686-linux], rails 3.0.8, rspec 2.6.0 et rspec-rails 2.6.1 et il pourrait ou ne pourrait pas fonctionner les anciennes versions de leur.

0

Bien que ce soit une question très ancienne, il est toujours d'abord quand googler « rails râteau stats concombre » et les réponses sont équivoques ou périmées .

Pour les futurs Googlers, tout ce que vous devez faire est de lancer

$ rails generate cucumber:install 

Cela va créer les fichiers nécessaires, et plus précisément le fichier lib/tasks/cucumber.rake, qui ajoute « Caractéristiques de concombre » à la sortie rake stats.