diff --git a/lib/factory_bot_rails/definition_file_paths.rb b/lib/factory_bot_rails/definition_file_paths.rb index 5b3ab60..0a515fd 100644 --- a/lib/factory_bot_rails/definition_file_paths.rb +++ b/lib/factory_bot_rails/definition_file_paths.rb @@ -19,5 +19,9 @@ def directories def files @files.select { |file| File.exist?(file) } end + + def any? + directories.any? + end end end diff --git a/lib/factory_bot_rails/reloader.rb b/lib/factory_bot_rails/reloader.rb index 329ac26..24588ba 100644 --- a/lib/factory_bot_rails/reloader.rb +++ b/lib/factory_bot_rails/reloader.rb @@ -7,9 +7,12 @@ class Reloader def initialize(app, config) @app = app @config = config + @paths = DefinitionFilePaths.new(FactoryBot.definition_file_paths) end def run + return unless @paths.any? + register_reloader(build_reloader) end @@ -18,9 +21,7 @@ def run attr_reader :app, :config def build_reloader - paths = DefinitionFilePaths.new(FactoryBot.definition_file_paths) - - reloader_class.new(paths.files, paths.directories) do + reloader_class.new(@paths.files, @paths.directories) do FactoryBot.reload end end diff --git a/spec/factory_bot_rails/definition_file_paths_spec.rb b/spec/factory_bot_rails/definition_file_paths_spec.rb index 8268baf..006ed18 100644 --- a/spec/factory_bot_rails/definition_file_paths_spec.rb +++ b/spec/factory_bot_rails/definition_file_paths_spec.rb @@ -30,4 +30,14 @@ expect(directories).to eq("spec/fixtures/factories" => [:rb]) end end + + describe "#any?" do + it "returns true only if definition file paths exist" do + definition_file_paths = ["spec/fixtures/factories", "not_exist_directory"] + expect(described_class.new(definition_file_paths).any?).to eq true + + definition_file_paths = ["not_exist_directory"] + expect(described_class.new(definition_file_paths).any?).to eq false + end + end end diff --git a/spec/factory_bot_rails/reloader_spec.rb b/spec/factory_bot_rails/reloader_spec.rb new file mode 100644 index 0000000..ea0e2ee --- /dev/null +++ b/spec/factory_bot_rails/reloader_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +describe FactoryBotRails::Reloader do + describe "#run" do + before do + @original_definition_file_paths = FactoryBot.definition_file_paths + end + + after do + FactoryBot.definition_file_paths = @original_definition_file_paths + end + + context "when a definition file paths exist" do + it "register a reloader" do + allow(reloader_class).to receive(:new) + + run_reloader(["spec/fixtures/factories", "not_exist_directory"]) + + expect(reloader_class).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) + + run_reloader(["not_exist_directory"]) + + expect(reloader_class).not_to have_received(:new) + end + end + + def run_reloader(definition_file_paths) + FactoryBot.definition_file_paths = definition_file_paths + FactoryBotRails::Reloader. + new(Rails.application, Rails.application.config).run + end + + def reloader_class + Rails.application.config.file_watcher + end + end +end