Add option to lazy load factory definitions#522
Open
quadule wants to merge 1 commit intothoughtbot:mainfrom
Open
Add option to lazy load factory definitions#522quadule wants to merge 1 commit intothoughtbot:mainfrom
quadule wants to merge 1 commit intothoughtbot:mainfrom
Conversation
quadule
commented
Jan 7, 2025
| FactoryBot.find_definitions | ||
| if app.config.factory_bot.lazy_load_definitions && !app.config.eager_load | ||
| require "factory_bot_rails/lazy_registry_find" | ||
| FactoryBot::Registry.prepend FactoryBotRails::LazyRegistryFind |
Author
There was a problem hiding this comment.
This should probably be implemented in the factory_bot gem instead, so I'll open another PR for that if there's any interest here.
f18edf4 to
b909731
Compare
b909731 to
3c76e51
Compare
jrafanie
reviewed
Oct 7, 2025
| module FactoryBotRails | ||
| module LazyRegistryFind | ||
| def self.find_definitions_once | ||
| return if defined?(@definitions_loaded) |
There was a problem hiding this comment.
@quadule 👋 Fellow user of this gem... I like the concept of this PR... but, this concerns me, how does this interface with FactoryBot.reload? Does this caching get cleared on reload?
In other words, do we get a new registry when the configuration is reset in reset_configuration?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Loading factory definitions can sometimes have a noticeable impact on Rails boot time: For example, in a large app I work on
FactoryBot.find_definitionstakes an average of 0.3s to load 274 factories. An option to lazy load them would avoid this overhead when factories are not needed.The new
lazy_load_definitionsoption is disabled by default for compatibility reasons, but all tests pass for bothfactory_botandfactory_bot_railswhen enabled. The railtie will also continue to load all factory definitions at boot ifconfig.eager_loadis enabled in the application.