require 'cucumber/formatter/ansicolor' CUCUMBER_FEATURES_PATH = 'features/lib'.freeze Before do |scenario| @original_cwd = Dir.pwd # We limit the length to avoid issues on Windows where sometimes the creation # of the temporary directory fails due to the length of the scenario name. scenario_name = scenario.name.downcase.gsub(/[^a-z0-9]+/, '-')[0..100] @tmp_working_directory = File.join('tmp', "scenario-#{scenario_name}-#{SecureRandom.uuid}") FileUtils.rm_rf(@tmp_working_directory) FileUtils.mkdir_p(@tmp_working_directory) Dir.chdir(@tmp_working_directory) end After do |scenario| command_line&.destroy_mocks Dir.chdir(@original_cwd) FileUtils.rm_rf(@tmp_working_directory) unless scenario.failed? end Around do |_, block| original_publish_token = ENV.delete('CUCUMBER_PUBLISH_TOKEN') original_coloring = Cucumber::Term::ANSIColor.coloring? block.call Cucumber::Term::ANSIColor.coloring = original_coloring ENV['CUCUMBER_PUBLISH_TOKEN'] = original_publish_token end Around('@force_legacy_loader') do |_, block| original_loader = Cucumber.use_legacy_autoloader Cucumber.use_legacy_autoloader = true block.call Cucumber.use_legacy_autoloader = original_loader end Before('@global_state') do # Ok, this one is tricky but kinda make sense. # So, we need to share state between some sub-scenarios (the ones executed by # CucumberCommand). But we don't want those to leak between the "real" scenarios # (the ones ran by Cucumber itself). # This should reset data hopefully (and make clear why we do that) # rubocop:disable Style/GlobalVars $global_state = nil $global_cukes = 0 $scenario_runs = 0 # rubocop:enable Style/GlobalVars end After('@disable_fail_fast') do Cucumber.wants_to_quit = false end