factory_trace gem aide à nettoyer vos usines

Si vous écrivez des tests pour votre projet et utilisez factory_bot pour générer des données de test, je vous présente le joyau factory_trace , qui vous aidera à maintenir vos usines et vos caractéristiques à jour.

Que fait-il?


Lors du lancement de vos tests, la gemme surveille l'utilisation de certaines usines, et à la fin de l'exécution, elle affiche un rapport de résultat.

$ 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 

Intégration de projet


Pour RSpec, il suffit d'installer la gemme et vous pouvez l'utiliser, pour tout autre testeur, il suffit de faire des manipulations simples:

 #      FactoryTrace.start #     FactoryTrace.stop 

Exécution parallèle / pièce


Souvent, si les tests prennent du temps, ils sont exécutés dans différents processus en plusieurs parties, et pour que les données sur les usines inutilisées soient correctes, il est nécessaire de traiter les statistiques de tous les tests.

Cela peut être fait comme suit:

 #   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 

Comment ça marche?


Grâce à l'implémentation de factory_bot à l' aide d' ActiveSupports::Notifications il est facile d'ajouter un rappel lorsque la fabrique est utilisée:

 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 

Et après avoir collecté toutes les informations, nous trouvons des usines inutilisées avec un algorithme simple.

post scriptum


Essayez-le et partagez vos commentaires, je vous en serai reconnaissant!

Merci de votre attention.

Source: https://habr.com/ru/post/fr450758/


All Articles