spec/support/app_integration.rb in hanami-2.0.0.beta3 vs spec/support/app_integration.rb in hanami-2.0.0.beta4

- old
+ new

@@ -21,10 +21,27 @@ RSpec.shared_context "Application integration" do let(:app_modules) { %i[TestApp Admin Main Search] } end +def autoloaders_teardown! + # Tear down Zeitwerk (from zeitwerk's own test/support/loader_test) + Zeitwerk::Registry.loaders.reject! do |loader| + test_loader = loader.dirs.any? { |dir| + dir.include?("/spec/") || dir.include?(Dir.tmpdir) || + dir.include?("/slices/") || dir.include?("/app") + } + + if test_loader + loader.unregister + true + else + false + end + end +end + RSpec.configure do |config| config.include RSpec::Support::Files, :app_integration config.include RSpec::Support::WithTmpDirectory, :app_integration config.include_context "Application integration", :app_integration @@ -34,24 +51,10 @@ @load_paths ||= $LOAD_PATH.dup @loaded_features ||= $LOADED_FEATURES.dup end config.after :each, :app_integration do - # Tear down Zeitwerk (from zeitwerk's own test/support/loader_test) - Zeitwerk::Registry.loaders.each(&:unload) - Zeitwerk::Registry.loaders.clear - - # This private interface changes between 2.5.4 and 2.6.0 - if Zeitwerk::Registry.respond_to?(:loaders_managing_gems) - Zeitwerk::Registry.loaders_managing_gems.clear - else - Zeitwerk::Registry.gem_loaders_by_root_file.clear - Zeitwerk::Registry.autoloads.clear - Zeitwerk::Registry.inceptions.clear - end - - Zeitwerk::ExplicitNamespace.cpaths.clear - Zeitwerk::ExplicitNamespace.tracer.disable + autoloaders_teardown! Hanami.instance_variable_set(:@_bundled, {}) Hanami.remove_instance_variable(:@_app) if Hanami.instance_variable_defined?(:@_app) $LOAD_PATH.replace(@load_paths)