diff --git a/lib/factory_bot_rails/railtie.rb b/lib/factory_bot_rails/railtie.rb index 2e9cd81..8dca2f4 100644 --- a/lib/factory_bot_rails/railtie.rb +++ b/lib/factory_bot_rails/railtie.rb @@ -18,12 +18,9 @@ module FactoryBotRails FactoryBot.definition_file_paths = definition_file_paths end - initializer "factory_bot.register_reloader" do |app| - Reloader.new(app, config).run - end - - config.after_initialize do - FactoryBot.reload + config.after_initialize do |app| + FactoryBot.find_definitions + Reloader.new(app).run end private diff --git a/lib/factory_bot_rails/reloader.rb b/lib/factory_bot_rails/reloader.rb index dacb94c..57d13d7 100644 --- a/lib/factory_bot_rails/reloader.rb +++ b/lib/factory_bot_rails/reloader.rb @@ -4,9 +4,8 @@ require "factory_bot_rails/definition_file_paths" module FactoryBotRails class Reloader - def initialize(app, config) + def initialize(app) @app = app - @config = config @paths = DefinitionFilePaths.new(FactoryBot.definition_file_paths) end @@ -18,7 +17,7 @@ module FactoryBotRails private - attr_reader :app, :config + attr_reader :app def build_reloader reloader_class.new(@paths.files, @paths.directories) do @@ -31,12 +30,8 @@ module FactoryBotRails end def register_reloader(reloader) - closed_over_app = app - - config.to_prepare do - if closed_over_app.initialized? - reloader.execute - end + app.reloader.to_prepare do + reloader.execute end app.reloaders << reloader diff --git a/spec/factory_bot_rails/reloader_spec.rb b/spec/factory_bot_rails/reloader_spec.rb index 70010d1..30ef75d 100644 --- a/spec/factory_bot_rails/reloader_spec.rb +++ b/spec/factory_bot_rails/reloader_spec.rb @@ -12,42 +12,74 @@ describe FactoryBotRails::Reloader do context "when a definition file paths exist" do it "registers a reloader" do - allow(reloader_class).to receive(:new) + file_watcher = file_watcher_double - run_reloader(["spec/fixtures/factories", "not_exist_directory"]) + run_reloader( + ["spec/fixtures/factories", "not_exist_directory"], + file_watcher + ) - expect(reloader_class).to have_received(:new) + expect(file_watcher).to have_received(:new) end end context "when a file exists but not a directory" do it "registers a reloader" do - allow(reloader_class).to receive(:new) + file_watcher = file_watcher_double - run_reloader(["spec/fake_app", "not_exist_directory"]) + run_reloader( + ["spec/fake_app", "not_exist_directory"], + file_watcher + ) - expect(reloader_class).to have_received(:new) + expect(file_watcher).to have_received(:new) end end context "when a definition file paths NOT exist" do it "does NOT register a reloader" do - allow(reloader_class).to receive(:new) + file_watcher = file_watcher_double - run_reloader(["not_exist_directory"]) + run_reloader(["not_exist_directory"], file_watcher) - expect(reloader_class).not_to have_received(:new) + expect(file_watcher).not_to have_received(:new) end end - def run_reloader(definition_file_paths) + def run_reloader(definition_file_paths, file_watcher) FactoryBot.definition_file_paths = definition_file_paths - FactoryBotRails::Reloader - .new(Rails.application, Rails.application.config).run + app = app_double(file_watcher) + FactoryBotRails::Reloader.new(app).run end - def reloader_class - Rails.application.config.file_watcher + def file_watcher_double + class_double( + Rails.application.config.file_watcher, + new: double(:reloader, execute: nil) + ) + end + + def app_double(file_watcher) + instance_double( + Rails.application.class, + config: app_config_double(file_watcher), + reloader: reloader_double, + reloaders: [] + ) + end + + def app_config_double(file_watcher) + instance_double( + Rails.application.config.class, + file_watcher: file_watcher + ) + end + + def reloader_double + class_double( + Rails.application.reloader, + to_prepare: nil + ) end end end