mirror of
https://github.com/thoughtbot/factory_bot_rails.git
synced 2022-11-09 11:49:18 -05:00
Do not register a reloader when file paths not exist
If all the paths specified in `FactoryBot.definition_file_paths` do not exist, an empty array is passed to the reloader. If an empty array is specified, reloader passes it to `Listen.to` as it is. This causes the application root to be watched and `node_modules` to become a target of listening. The behavior when an empty array is passed to reloader depends on the Rails side. Fixes to not register a reloader when file paths do not exist consistent behavior regardless of Rails side. Fixes #328.
This commit is contained in:
parent
2b7bca0094
commit
9b83f482b5
4 changed files with 71 additions and 3 deletions
|
@ -19,5 +19,9 @@ module FactoryBotRails
|
||||||
def files
|
def files
|
||||||
@files.select { |file| File.exist?(file) }
|
@files.select { |file| File.exist?(file) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def any?
|
||||||
|
directories.any? || files.any?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,9 +7,12 @@ module FactoryBotRails
|
||||||
def initialize(app, config)
|
def initialize(app, config)
|
||||||
@app = app
|
@app = app
|
||||||
@config = config
|
@config = config
|
||||||
|
@paths = DefinitionFilePaths.new(FactoryBot.definition_file_paths)
|
||||||
end
|
end
|
||||||
|
|
||||||
def run
|
def run
|
||||||
|
return unless @paths.any?
|
||||||
|
|
||||||
register_reloader(build_reloader)
|
register_reloader(build_reloader)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -18,9 +21,7 @@ module FactoryBotRails
|
||||||
attr_reader :app, :config
|
attr_reader :app, :config
|
||||||
|
|
||||||
def build_reloader
|
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
|
FactoryBot.reload
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,4 +30,14 @@ describe FactoryBotRails::DefinitionFilePaths do
|
||||||
expect(directories).to eq("spec/fixtures/factories" => [:rb])
|
expect(directories).to eq("spec/fixtures/factories" => [:rb])
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
53
spec/factory_bot_rails/reloader_spec.rb
Normal file
53
spec/factory_bot_rails/reloader_spec.rb
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
# 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 "registers 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 file exists but not a directory" do
|
||||||
|
it "registers a reloader" do
|
||||||
|
allow(reloader_class).to receive(:new)
|
||||||
|
|
||||||
|
run_reloader(["spec/fake_app", "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
|
Loading…
Reference in a new issue