factory_trace gem hilft beim Reinigen Ihrer Fabriken

Wenn Sie Tests für Ihr Projekt schreiben und mit factory_bot Testdaten generieren, präsentiere ich Ihnen das Juwel factory_trace , mit dem Sie Ihre Fabriken und Eigenschaften auf dem neuesten Stand halten können.

Was macht?


Während des Starts Ihrer Tests überwacht der Edelstein die Verwendung bestimmter Fabriken und zeigt am Ende der Ausführung einen Ergebnisbericht an.

$ 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 

Projektintegration


Für RSpec reicht es aus, den Edelstein zu installieren, und Sie können ihn verwenden. Für jeden anderen Tester reicht es aus, einfache Manipulationen durchzuführen:

 #      FactoryTrace.start #     FactoryTrace.stop 

Parallele / Stückausführung


Wenn Tests lange dauern, werden sie häufig in Teilen in unterschiedlichen Prozessen ausgeführt. Damit die Daten zu nicht verwendeten Fabriken korrekt sind, müssen Statistiken aus allen Tests verarbeitet werden.

Dies kann wie folgt erfolgen:

 #   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 

Wie funktioniert es


Dank der Implementierung von factory_bot mit ActiveSupports::Notifications es einfach, einen Rückruf hinzuzufügen, wenn die Factory verwendet wird:

 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 

Und nachdem wir alle Informationen gesammelt haben, finden wir unbenutzte Fabriken mit einem einfachen Algorithmus.

post scriptum


Probieren Sie es aus und teilen Sie Ihr Feedback, ich werde Ihnen dankbar sein!

Vielen Dank für Ihre Aufmerksamkeit.

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


All Articles