Вопрос

Я использую Cucumber с RSpec в проекте Rails.Когда я использую задачу "статистика рейка", я получаю следующее :

+----------------------+-------+-------+---------+---------+-----+-------+
| 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 создает файл 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-rails.Просто расширьте задачу локально с помощью чего-то вроде этого:

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

И, к вашему сведению, Лихтамберг и Дэмиен МАТЬЕ, это прекрасно работает с rspec 2.Однако эти специфичные для rails задачи рейка ofc являются не частью самого rspec gem, а частью rspec-rails gem.

P.S.Все это было протестировано с 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» и ответы вводят в заблуждение или устарели.

Для будущих гуглеров все, что вам нужно сделать, это запустить

$ rails generate cucumber:install

Это создаст необходимые файлы, в частности файл lib / tasks / cucumber.rake , в который добавлены " Cucumber Features " на вывод rake stats .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top