Я пытаюсь настроить SimpleCov для создания отчетов для 3 приложений, которые совместно используют большую часть своего кода (модели, контроллеры) из локального гема, но спецификации для кода, который использует каждое приложение, находятся внутри каждого ./spec, а не включены Сам камень.
Для более ясного примера. Когда я запускаю спецификацию bundle exec rspec внутри app_1, которая использует общие модели из локального гема, я хочу получить (точные) отчеты по всем спецификациям, которые есть у этого app_1 ./spec.
В локальном геме также есть несколько моделей, которые принадлежат исключительно для app_2, внутри пространства имен, поэтому я хочу пропустить отчет по этим файлам при запуске набора тестов внутри app_1.
Я пытаюсь добиться этого с помощью следующего кода в app_1 / spec / spec_helper.
# This couple of lines are needed to generate report for the models, etc. inside the local gem.
SimpleCov.adapters.delete(:root_filter)
SimpleCov.filters.clear
SimpleCov.adapters.define 'my_filter' do
root = SimpleCov.root.split("/")
root.pop
add_filter do |src|
!(src.filename =~ /^#{root.join("/")}/)
end
add_filter "/app_2_namespace/"
end
if ENV["COVERAGE"] == "true"
SimpleCov.start 'rails'
end
Это работает, пока не начнут возникать некоторые вопросы.
Почему я получаю 85% покрытия для модели, которая находится внутри драгоценного камня, но спецификация находится внутри app_2 (я запускаю спецификацию внутри app_1).
В первый раз это была проблема, когда я попытался улучшить эту модель, поэтому я нажал на отчет для нее и увидел, какие строки были обнаружены, и я попытался исправить их, написав тесты для них в app_2 / spec / namespace / my_model_spec.rb.
Но это не имело никакого значения, я попробовал более агрессивный тест и стер все содержимое спецификации, но почему-то я все еще получал 85% покрытия, так что my_model_spec.rb не связан с результаты покрытия my_model.rb. Вид неожиданный.
Но так как этот файл был в app_2, я решил добавить фильтр в блок SimpleCov.start в app_1 spec_helper, например:
add_filter "/app_2_name_space/"
Затем я перешел в папку app_2 и начал настраивать SimpleCov и посмотреть, какие результаты я получу здесь. И они оказались страннее.
Для той же модели я получил 100% -ое покрытие, я сделал тот же тест на опустошение файла my_model_spec.rb и все еще получил 100%. Так что это действительно офигительно, или я чего-то не понимаю.
Как это работает? ( с модулем Ruby 1.9 Coverage вы говорите, хорошо, когда я запускаю локально пример официальной документации, я получаю разные результаты, так что я думаю, что есть ошибка или устаревшая документация )
ruby-doc: {"foo.rb"=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil]}
locally: {"foo.rb"=>[1, 1, 10, nil, nil, 1, 0, nil, 1, nil]}
Я надеюсь, что отчеты не показывают положительных результатов для строк, которые оцениваются где-то в коде приложения, независимо от того, где.
Я думаю, что ожидаемое поведение таково, что результаты для модели, например, связаны с ее спецификацией, то же самое для контроллеров и т. Д.
Это тот случай? Если так, то почему я получаю такие странные результаты.
Или, как вы думаете, структура моих приложений может испортиться из-за SimpleCov и Coverage?
Спасибо, что нашли время, чтобы прочитать это, если вам нужна более подробная информация, просто спросите.