문제
Rails 프로젝트에서 RSPEC과 함께 오이를 사용하고 있습니다. "레이크 통계"작업을 사용하면 다음을 얻습니다.
+----------------------+-------+-------+---------+---------+-----+-------+
| 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은 통계를 추가합니다 (모델, 뷰, 컨트롤러 및 도우미 사양 참조).
그러나 나는 오이가 없습니다. 레이크 통계에 어떻게 추가 할 수 있습니까?
해결책
RSPEC은 a lib/tasks/rspec.rake
파일. 그리고 그 안에 통계 디렉토리를 재정의합니다.
해당 파일의 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
작업이 끝나기 직전에 오이 기능 디렉토리를 추가하면됩니다.
#
# 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')
다른 팁
왜 원숭이가 보석을 패치합니까? RSPEC-RAIL을 업데이트 할 때마다 수정 사항을 추가해야합니다. 다음과 같은 것으로 작업을 로컬로 확장하십시오.
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
그리고 FYI Lichtamberg와 Damien Mathieu 이것은 RSPEC 2에서 잘 작동합니다. 그러나이 레일 특정 레이크 작업은 RSPEC 보석 자체의 일부가 아니라 RSPEC- 레일 보석의 일부입니다.
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에서 작동하는 버전입니다.
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
"오이 기능"을 추가하는 파일 rake stats
산출.