factory_trace gem可帮助清洁工厂

如果您为项目编写测试并使用factory_bot生成测试数据,我将向您展示factory_trace gem,这将帮助您使工厂和特性保持最新。

它是做什么的?


在测试启动期间,gem监视某些工厂的使用,并在执行结束时显示结果报告。

$ 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,安装gem就足够了,您可以使用它,对于任何其他测试器,只需执行简单的操作即可:

 #      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 

如何运作?


由于使用ActiveSupports::Notifications实现ActiveSupports::Notifications因此在使用工厂时很容易添加回调:

 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 

在收集了所有信息之后,我们使用简单的算法找到了未使用的工厂。

圣经后


自己尝试并分享您的反馈,我将不胜感激!

谢谢您的关注。

Source: https://habr.com/ru/post/zh-CN450758/


All Articles