耙统计和黄瓜

我在Rails项目中使用Cucumber和RSpec。 当我使用“rake stats”任务时,我得到以下内容:

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

所以rspec添加了它的统计数据(参见模型,视图,控制器和帮助器规范)。
但我没有黄瓜。 我怎么能将它们添加到我的rake统计数据中?

RSpec创建一个lib/tasks/rspec.rake文件。 并重新定义其中的stats目录。

在该文件的第108行,您将看到:

 # 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 

您只需要在任务结束前添加黄瓜function目录。

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

为什么猴子像那样修补gem? 每次更新rspec-rails时都必须为其添加修复程序。 只需使用以下内容在本地扩展任务:

 echo "# Adding Cucumber features to be reported by the command: # rake stats # But eg 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 

而FYI Lichtamberg和Damien MATHIEU这对rspec 2来说效果很好。但是这些rails特定的rake任务不属于rspec gem本身,而是rspec-rails gem的一部分。

PS这一切都是用ruby 1.9.2p180(2011-02-18修订版30909)[i686-linux],rails 3.0.8,rspec 2.6.0和rspec-rails 2.6.1测试的,它可能会也可能不适用于旧版本他们

这是一个适用于Turnip和RSpec 2的版本

https://gist.github.com/2360892

 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 

码:

 # 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 

虽然这是一个非常古老的问题,但它仍然是谷歌搜索“rails rake stats cucumber”时的第一个,答案是误导或过时的。

对于未来的googlers,您需要做的就是运行

 $ rails generate cucumber:install 

这将创建必要的文件,特别是lib/tasks/cucumber.rake文件,它将“Cucumber Features”添加到rake stats输出中。