- PVSM.RU - https://www.pvsm.ru -
Если вы пишите тесты для вашего проекта и используете factory_bot [1] для генерации тестовых данных, то представляю вам гем factory_trace [2], который поможет вам поддерживать ваши factories & traits в актуальном состоянии.
Во время запуска ваших тестов, гем отслеживает использование тех или иных фабрик, а в конце исполнения выводит результирующий отчет.
$ FB_TRACE=1 rspec
total number of unique used factories & traits: 3
total number of unique unused factories & traits: 2
unused global trait with_email
unused factory admin
Для RSpec, достаточно установить гем и можно пользоваться, для любого другого тестера, достаточно сделать простые манипуляции:
# добавить до начала исполнения тестов
FactoryTrace.start
# добавить после завершения тестов
FactoryTrace.stop
Часто, если тесты занимают долгое время, их запускают в разных процессах по частям, а для того, чтобы данные о неиспользованных фабрик были верны, необходимо обработать статистику со всех тестов.
Это можно сделать, следующим образом:
# одна часть
FB_TRACE=trace_only FB_TRACE_FILE=fb_trace_result1.txt bundle exec rspec spec/first_spec.rb
# другая часть (их может быть сколько угодно)
FB_TRACE=trace_only FB_TRACE_FILE=fb_trace_result2.txt bundle exec rspec spec/second_spec.rb
# группировка и обработка данных
bundle exec factory_trace fb_trace_result1.txt fb_trace_result2.txt
Благодаря реализации factory_bot [1] с использованием ActiveSupports::Notifications
легко добавить callback, когда фабрика используется:
ActiveSupport::Notifications.subscribe('factory_bot.run_factory') do |_name, _start, _finish, _id, payload|
name = payload[:name]
traits = payload[:traits]
storage[name] ||= Set.new
storage[name] |= traits
end
А после сбора всей информации, простым алгоритмом находим неиспользуемые фабрики.
Попробуйте сами и поделитесь своим отзывом, буду признателен!
Спасибо за внимание.
Автор: djezzzl
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ruby/316888
Ссылки в тексте:
[1] factory_bot: https://github.com/thoughtbot/factory_bot
[2] factory_trace: https://github.com/djezzzl/factory_trace
[3] Источник: https://habr.com/ru/post/450758/?utm_source=habrahabr&utm_medium=rss&utm_campaign=450758
Нажмите здесь для печати.