- PVSM.RU - https://www.pvsm.ru -

factory_trace gem поможет почистить ваши factories

Если вы пишите тесты для вашего проекта и используете 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

А после сбора всей информации, простым алгоритмом находим неиспользуемые фабрики.

post scriptum

Попробуйте сами и поделитесь своим отзывом, буду признателен!

Спасибо за внимание.

Автор: 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