knapsack_pro 6.0.3 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +375 -28
  3. data/.github/pull_request_template.md +22 -0
  4. data/.gitignore +4 -0
  5. data/CHANGELOG.md +95 -0
  6. data/Gemfile +9 -0
  7. data/README.md +0 -7
  8. data/knapsack_pro.gemspec +2 -1
  9. data/lib/knapsack_pro/adapters/base_adapter.rb +7 -2
  10. data/lib/knapsack_pro/adapters/cucumber_adapter.rb +1 -3
  11. data/lib/knapsack_pro/adapters/rspec_adapter.rb +16 -9
  12. data/lib/knapsack_pro/config/env.rb +1 -9
  13. data/lib/knapsack_pro/extensions/rspec_extension.rb +137 -0
  14. data/lib/knapsack_pro/formatters/time_tracker.rb +10 -26
  15. data/lib/knapsack_pro/formatters/time_tracker_fetcher.rb +8 -0
  16. data/lib/knapsack_pro/presenter.rb +1 -1
  17. data/lib/knapsack_pro/pure/queue/rspec_pure.rb +92 -0
  18. data/lib/knapsack_pro/runners/queue/base_runner.rb +6 -1
  19. data/lib/knapsack_pro/runners/queue/cucumber_runner.rb +6 -6
  20. data/lib/knapsack_pro/runners/queue/minitest_runner.rb +10 -6
  21. data/lib/knapsack_pro/runners/queue/rspec_runner.rb +124 -173
  22. data/lib/knapsack_pro/urls.rb +2 -0
  23. data/lib/knapsack_pro/version.rb +1 -1
  24. data/lib/knapsack_pro.rb +1 -0
  25. data/spec/integration/runners/queue/rspec_runner.rb +80 -0
  26. data/spec/integration/runners/queue/rspec_runner_spec.rb +2232 -0
  27. data/spec/knapsack_pro/adapters/base_adapter_spec.rb +17 -11
  28. data/spec/knapsack_pro/adapters/cucumber_adapter_spec.rb +2 -5
  29. data/spec/knapsack_pro/adapters/rspec_adapter_spec.rb +2 -24
  30. data/spec/knapsack_pro/config/env_spec.rb +1 -35
  31. data/spec/knapsack_pro/formatters/time_tracker_specs.rb +8 -37
  32. data/spec/knapsack_pro/hooks/queue_spec.rb +2 -2
  33. data/spec/knapsack_pro/presenter_spec.rb +1 -1
  34. data/spec/knapsack_pro/pure/queue/rspec_pure_spec.rb +224 -0
  35. data/spec/knapsack_pro/runners/queue/cucumber_runner_spec.rb +16 -16
  36. data/spec/knapsack_pro/runners/queue/minitest_runner_spec.rb +14 -14
  37. data/spec/knapsack_pro_spec.rb +3 -3
  38. data/spec/spec_helper.rb +0 -1
  39. metadata +17 -12
  40. data/lib/knapsack_pro/formatters/rspec_queue_profile_formatter_extension.rb +0 -58
  41. data/lib/knapsack_pro/formatters/rspec_queue_summary_formatter.rb +0 -145
  42. data/spec/knapsack_pro/runners/queue/rspec_runner_spec.rb +0 -536
@@ -87,7 +87,7 @@ module KnapsackPro
87
87
 
88
88
  def bind_time_tracker
89
89
  ensure_no_focus!
90
- log_batch_duration
90
+ log_tests_duration
91
91
  end
92
92
 
93
93
  def ensure_no_focus!
@@ -105,12 +105,14 @@ module KnapsackPro
105
105
  end
106
106
  end
107
107
 
108
- def log_batch_duration
108
+ def log_tests_duration
109
109
  ::RSpec.configure do |config|
110
- config.after(:suite) do
110
+ config.append_after(:suite) do
111
111
  time_tracker = KnapsackPro::Formatters::TimeTrackerFetcher.call
112
- formatted = KnapsackPro::Presenter.global_time(time_tracker.batch_duration)
113
- KnapsackPro.logger.debug(formatted)
112
+ if time_tracker
113
+ formatted = KnapsackPro::Presenter.global_time(time_tracker.duration)
114
+ KnapsackPro.logger.debug(formatted)
115
+ end
114
116
  end
115
117
  end
116
118
  end
@@ -127,10 +129,15 @@ module KnapsackPro
127
129
  def bind_before_queue_hook
128
130
  ::RSpec.configure do |config|
129
131
  config.before(:suite) do
130
- unless ENV['KNAPSACK_PRO_BEFORE_QUEUE_HOOK_CALLED']
131
- ENV['KNAPSACK_PRO_BEFORE_QUEUE_HOOK_CALLED'] = 'true'
132
- KnapsackPro::Hooks::Queue.call_before_queue
133
- end
132
+ KnapsackPro::Hooks::Queue.call_before_queue
133
+ end
134
+ end
135
+ end
136
+
137
+ def bind_after_queue_hook
138
+ ::RSpec.configure do |config|
139
+ config.after(:suite) do
140
+ KnapsackPro::Hooks::Queue.call_after_queue
134
141
  end
135
142
  end
136
143
  end
@@ -144,14 +144,6 @@ module KnapsackPro
144
144
  test_files_encrypted == 'true'
145
145
  end
146
146
 
147
- def modify_default_rspec_formatters
148
- ENV.fetch('KNAPSACK_PRO_MODIFY_DEFAULT_RSPEC_FORMATTERS', true)
149
- end
150
-
151
- def modify_default_rspec_formatters?
152
- modify_default_rspec_formatters.to_s == 'true'
153
- end
154
-
155
147
  def branch_encrypted
156
148
  ENV['KNAPSACK_PRO_BRANCH_ENCRYPTED']
157
149
  end
@@ -276,7 +268,7 @@ module KnapsackPro
276
268
  end
277
269
 
278
270
  def log_level
279
- LOG_LEVELS[ENV['KNAPSACK_PRO_LOG_LEVEL'].to_s.downcase] || ::Logger::DEBUG
271
+ LOG_LEVELS[ENV['KNAPSACK_PRO_LOG_LEVEL'].to_s.downcase] || ::Logger::INFO
280
272
  end
281
273
 
282
274
  def log_dir
@@ -0,0 +1,137 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KnapsackPro
4
+ module Extensions
5
+ # Facade to abstract calls to internal RSpec methods.
6
+ # To allow comparing the monkey patch with the original RSpec code, keep a similar method structure and permalink to the source.
7
+ module RSpecExtension
8
+ Seed = Struct.new(:value, :used?)
9
+
10
+ def self.setup!
11
+ RSpec::Core::World.prepend(World)
12
+ RSpec::Core::Runner.prepend(Runner)
13
+ RSpec::Core::Configuration.prepend(Configuration)
14
+ end
15
+
16
+ module World
17
+ # Based on:
18
+ # https://github.com/rspec/rspec-core/blob/f8c8880dabd8f0544a6f91d8d4c857c1bd8df903/lib/rspec/core/world.rb#L171
19
+ #
20
+ # Filters are not announced because we do not load tests during setup. It would print `No examples found.` and we don't want that.
21
+ def knapsack__announce_filters
22
+ fail_if_config_and_cli_options_invalid
23
+ end
24
+ end
25
+
26
+ module Runner
27
+ # Based on:
28
+ # https://github.com/rspec/rspec-core/blob/f8c8880dabd8f0544a6f91d8d4c857c1bd8df903/lib/rspec/core/runner.rb#L98
29
+ #
30
+ # `@configuration.load_spec_files` is not called because we load tests in batches with `knapsack__load_spec_files_batch` later on.
31
+ def knapsack__setup(stream_error = $stderr, stream_out = $stdout)
32
+ configure(stream_error, stream_out)
33
+ ensure
34
+ world.knapsack__announce_filters
35
+ end
36
+
37
+ def knapsack__wants_to_quit?
38
+ world.wants_to_quit
39
+ end
40
+
41
+ def knapsack__rspec_is_quitting?
42
+ world.respond_to?(:rspec_is_quitting) && world.rspec_is_quitting
43
+ end
44
+
45
+ def knapsack__exit_early
46
+ _exit_status = configuration.reporter.exit_early(exit_code)
47
+ end
48
+
49
+ # Based on:
50
+ # https://github.com/rspec/rspec-core/blob/f8c8880dabd8f0544a6f91d8d4c857c1bd8df903/lib/rspec/core/configuration.rb#L546
51
+ def knapsack__error_exit_code
52
+ configuration.error_exit_code # nil unless `--error-exit-code` is specified
53
+ end
54
+
55
+ # must be called after `Runner#knapsack__setup` that loads the `spec_helper.rb` configuration
56
+ def knapsack__deprecated_run_all_when_everything_filtered_enabled?
57
+ configuration.respond_to?(:run_all_when_everything_filtered) && !!configuration.run_all_when_everything_filtered
58
+ end
59
+
60
+ def knapsack__seed
61
+ Seed.new(configuration.seed.to_s, configuration.seed_used?)
62
+ end
63
+
64
+ # @param test_file_paths Array[String]
65
+ # Example: ['a_spec.rb', 'b_spec.rb[1:1]']
66
+ def knapsack__load_spec_files_batch(test_file_paths)
67
+ world.reset
68
+
69
+ # Reset filters, but do not reset `configuration.static_config_filter_manager` to preserve the --tag option
70
+ filter_manager = RSpec::Core::FilterManager.new
71
+ options.configure_filter_manager(filter_manager)
72
+ configuration.filter_manager = filter_manager
73
+
74
+ configuration.knapsack__load_spec_files(test_file_paths)
75
+ end
76
+
77
+ # Based on:
78
+ # https://github.com/rspec/rspec-core/blob/f8c8880dabd8f0544a6f91d8d4c857c1bd8df903/lib/rspec/core/runner.rb#L113
79
+ #
80
+ # Ignore `configuration.fail_if_no_examples` in Queue Mode:
81
+ # * a late CI node, started after all tests were executed by other nodes, is expected to receive an empty batch
82
+ # * a batch could contain tests with no examples (e.g. commented out)
83
+ #
84
+ # @return [Fixnum] exit status code.
85
+ def knapsack__run_specs(queue_runner)
86
+ # Based on:
87
+ # https://github.com/rspec/rspec-core/blob/f8c8880dabd8f0544a6f91d8d4c857c1bd8df903/lib/rspec/core/world.rb#L53
88
+ ordering_strategy = configuration.ordering_registry.fetch(:global)
89
+ node_examples_passed = true
90
+
91
+ configuration.reporter.report(_expected_example_count = 0) do |reporter|
92
+ configuration.with_suite_hooks do
93
+ queue_runner.with_batch do |test_file_paths|
94
+ knapsack__load_spec_files_batch(test_file_paths)
95
+
96
+ examples_passed = ordering_strategy.order(world.example_groups).map do |example_group|
97
+ queue_runner.handle_signal!
98
+ example_group.run(reporter)
99
+ end.all?
100
+
101
+ node_examples_passed = false unless examples_passed
102
+
103
+ knapsack__persist_example_statuses
104
+
105
+ if reporter.fail_fast_limit_met?
106
+ queue_runner.log_fail_fast_limit_met
107
+ break
108
+ end
109
+ end
110
+ end
111
+
112
+ exit_code(node_examples_passed)
113
+ end
114
+ end
115
+
116
+ # Based on:
117
+ # https://github.com/rspec/rspec-core/blob/f8c8880dabd8f0544a6f91d8d4c857c1bd8df903/lib/rspec/core/runner.rb#L90
118
+ def knapsack__persist_example_statuses
119
+ persist_example_statuses
120
+ end
121
+ end
122
+
123
+ module Configuration
124
+ # Based on:
125
+ # https://github.com/rspec/rspec-core/blob/f8c8880dabd8f0544a6f91d8d4c857c1bd8df903/lib/rspec/core/configuration.rb#L1619
126
+ def knapsack__load_spec_files(test_file_paths)
127
+ batch_of_files_to_run = get_files_to_run(test_file_paths)
128
+ batch_of_files_to_run.each do |f|
129
+ file = File.expand_path(f)
130
+ load_file_handling_errors(:load, file)
131
+ loaded_spec_files << file
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
@@ -9,24 +9,18 @@ module KnapsackPro
9
9
  :example_group_started,
10
10
  :example_started,
11
11
  :example_finished,
12
- :example_group_finished,
13
- :stop
12
+ :example_group_finished
14
13
 
15
14
  attr_reader :output # RSpec < v3.10.2
16
15
 
17
- # Called at the beginning of each batch,
18
- # but only the first instance of this class is used,
19
- # so don't rely on the initializer to reset values.
20
16
  def initialize(_output)
21
17
  @output = StringIO.new
22
18
  @time_each = nil
23
19
  @time_all = nil
24
20
  @before_all = 0.0
25
21
  @group = {}
26
- @batch = {}
27
- @queue = {}
22
+ @paths = {}
28
23
  @suite_started = now
29
- @batch_started = now
30
24
  end
31
25
 
32
26
  def example_group_started(notification)
@@ -47,21 +41,15 @@ module KnapsackPro
47
41
  def example_group_finished(notification)
48
42
  return unless top_level_group?(notification.group)
49
43
 
50
- add_hooks_time(@group, @before_all, now - @time_all)
51
- @batch = merge(@batch, @group)
44
+ after_all = @time_all.nil? ? 0.0 : now - @time_all
45
+ add_hooks_time(@group, @before_all, after_all)
52
46
  @before_all = 0.0
47
+ @paths = merge(@paths, @group)
53
48
  @group = {}
54
49
  end
55
50
 
56
- # Called at the end of each batch
57
- def stop(_notification)
58
- @queue = merge(@queue, @batch)
59
- @batch = {}
60
- @batch_started = now
61
- end
62
-
63
51
  def queue(scheduled_paths)
64
- recorded_paths = @queue.values.map do |example|
52
+ recorded_paths = @paths.values.map do |example|
65
53
  KnapsackPro::Adapters::RSpecAdapter.parse_file_path(example[:path])
66
54
  end
67
55
 
@@ -69,13 +57,13 @@ module KnapsackPro
69
57
  object[path] = { path: path, time_execution: 0.0 }
70
58
  end
71
59
 
72
- merge(@queue, missing).values.map do |example|
60
+ merge(@paths, missing).values.map do |example|
73
61
  example.transform_keys(&:to_s)
74
62
  end
75
63
  end
76
64
 
77
65
  def batch
78
- @batch.values.map do |example|
66
+ @paths.values.map do |example|
79
67
  example.transform_keys(&:to_s)
80
68
  end
81
69
  end
@@ -84,17 +72,13 @@ module KnapsackPro
84
72
  now - @suite_started
85
73
  end
86
74
 
87
- def batch_duration
88
- now - @batch_started
89
- end
90
-
91
75
  def unexecuted_test_files(scheduled_paths)
92
- pending_paths = (@queue.values + @batch.values)
76
+ pending_paths = @paths.values
93
77
  .filter { |example| example[:time_execution] == 0.0 }
94
78
  .map { |example| example[:path] }
95
79
 
96
80
  not_run_paths = scheduled_paths -
97
- (@queue.values + @batch.values)
81
+ @paths.values
98
82
  .map { |example| example[:path] }
99
83
 
100
84
  pending_paths + not_run_paths
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module KnapsackPro
2
4
  module Formatters
3
5
  class TimeTrackerFetcher
@@ -7,6 +9,12 @@ module KnapsackPro
7
9
  .formatters
8
10
  .find { |f| f.class.to_s == "KnapsackPro::Formatters::TimeTracker" }
9
11
  end
12
+
13
+ def self.unexecuted_test_files(scheduled_paths)
14
+ time_tracker = call
15
+ return [] unless time_tracker
16
+ time_tracker.unexecuted_test_files(scheduled_paths)
17
+ end
10
18
  end
11
19
  end
12
20
  end
@@ -6,7 +6,7 @@ module KnapsackPro
6
6
  def global_time(time = nil)
7
7
  time = KnapsackPro.tracker.global_time if time.nil?
8
8
  global_time = pretty_seconds(time)
9
- "Global time execution for tests: #{global_time}"
9
+ "Global test execution duration: #{global_time}"
10
10
  end
11
11
 
12
12
  def pretty_seconds(seconds)
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KnapsackPro
4
+ module Pure
5
+ module Queue
6
+ class RSpecPure
7
+ FAILURE_EXIT_CODE = 1
8
+ FORMATTERS = [
9
+ 'KnapsackPro::Formatters::TimeTracker',
10
+ ]
11
+
12
+ def add_knapsack_pro_formatters_to(spec_opts)
13
+ return spec_opts unless spec_opts
14
+ return spec_opts if FORMATTERS.all? { |formatter| spec_opts.include?(formatter) }
15
+
16
+ FORMATTERS.each do |formatter|
17
+ next if spec_opts.include?(formatter)
18
+ spec_opts += " --format #{formatter}"
19
+ end
20
+
21
+ spec_opts
22
+ end
23
+
24
+ def error_exit_code(rspec_error_exit_code)
25
+ rspec_error_exit_code || FAILURE_EXIT_CODE
26
+ end
27
+
28
+ def args_with_seed_option_added_when_viable(order_option, seed, args)
29
+ return args if order_option && !order_option.include?('rand')
30
+ return args if order_option && order_option.to_s.split(':')[1]
31
+
32
+ return args unless seed.used?
33
+
34
+ args + ['--seed', seed.value]
35
+ end
36
+
37
+ def prepare_cli_args(args, has_format_option, test_dir)
38
+ (args || '').split
39
+ .yield_self { args_with_at_least_one_formatter(_1, has_format_option) }
40
+ .yield_self { args_with_default_options(_1, test_dir) }
41
+ end
42
+
43
+ def rspec_command(args, test_file_paths, scope)
44
+ messages = []
45
+ return messages if test_file_paths.empty?
46
+
47
+ case scope
48
+ when :batch_finished
49
+ messages << 'To retry the last batch of tests fetched from the Queue API, please run the following command on your machine:'
50
+ when :queue_finished
51
+ messages << 'To retry all the tests assigned to this CI node, please run the following command on your machine:'
52
+ end
53
+
54
+ stringified_cli_args = args.join(' ')
55
+ FORMATTERS.each do |formatter|
56
+ stringified_cli_args.sub!(" --format #{formatter}", '')
57
+ end
58
+
59
+ messages << "bundle exec rspec #{stringified_cli_args} " + KnapsackPro::TestFilePresenter.stringify_paths(test_file_paths)
60
+
61
+ messages
62
+ end
63
+
64
+ def exit_summary(unexecuted_test_files)
65
+ return if unexecuted_test_files.empty?
66
+
67
+ "Unexecuted tests on this CI node (including pending tests): #{unexecuted_test_files.join(' ')}"
68
+ end
69
+
70
+ private
71
+
72
+ def args_with_at_least_one_formatter(cli_args, has_format_option)
73
+ return cli_args if has_format_option
74
+
75
+ cli_args + ['--format', 'progress']
76
+ end
77
+
78
+ def args_with_default_options(cli_args, test_dir)
79
+ new_cli_args = cli_args + [
80
+ '--default-path', test_dir,
81
+ ]
82
+
83
+ FORMATTERS.each do |formatter|
84
+ new_cli_args += ['--format', formatter]
85
+ end
86
+
87
+ new_cli_args
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -4,6 +4,7 @@ module KnapsackPro
4
4
  module Runners
5
5
  module Queue
6
6
  class BaseRunner
7
+ TerminationError = Class.new(StandardError)
7
8
  TERMINATION_SIGNALS = %w(HUP INT TERM ABRT QUIT USR1 USR2)
8
9
 
9
10
  @@terminate_process = false
@@ -42,13 +43,17 @@ module KnapsackPro
42
43
  end
43
44
 
44
45
  def self.handle_signal!
45
- raise 'Knapsack Pro process was terminated!' if @@terminate_process
46
+ raise TerminationError.new('Knapsack Pro process was terminated!') if @@terminate_process
46
47
  end
47
48
 
48
49
  def self.set_terminate_process
49
50
  @@terminate_process = true
50
51
  end
51
52
 
53
+ def set_terminate_process
54
+ self.class.set_terminate_process
55
+ end
56
+
52
57
  def trap_signals
53
58
  TERMINATION_SIGNALS.each do |signal|
54
59
  Signal.trap(signal) {
@@ -21,7 +21,7 @@ module KnapsackPro
21
21
  can_initialize_queue: true,
22
22
  args: args,
23
23
  exitstatus: 0,
24
- all_test_file_paths: [],
24
+ node_test_file_paths: [],
25
25
  }
26
26
  while accumulator[:status] == :next
27
27
  handle_signal!
@@ -36,15 +36,15 @@ module KnapsackPro
36
36
  can_initialize_queue = accumulator.fetch(:can_initialize_queue)
37
37
  args = accumulator.fetch(:args)
38
38
  exitstatus = accumulator.fetch(:exitstatus)
39
- all_test_file_paths = accumulator.fetch(:all_test_file_paths)
39
+ node_test_file_paths = accumulator.fetch(:node_test_file_paths)
40
40
 
41
41
  test_file_paths = runner.test_file_paths(
42
42
  can_initialize_queue: can_initialize_queue,
43
- executed_test_files: all_test_file_paths
43
+ executed_test_files: node_test_file_paths
44
44
  )
45
45
 
46
46
  if test_file_paths.empty?
47
- unless all_test_file_paths.empty?
47
+ unless node_test_file_paths.empty?
48
48
  KnapsackPro::Adapters::CucumberAdapter.verify_bind_method_called
49
49
  end
50
50
 
@@ -65,7 +65,7 @@ module KnapsackPro
65
65
 
66
66
  KnapsackPro::Hooks::Queue.call_before_subset_queue
67
67
 
68
- all_test_file_paths += test_file_paths
68
+ node_test_file_paths += test_file_paths
69
69
 
70
70
  result_exitstatus = cucumber_run(runner, test_file_paths, args)
71
71
  exitstatus = result_exitstatus if result_exitstatus != 0
@@ -80,7 +80,7 @@ module KnapsackPro
80
80
  can_initialize_queue: false,
81
81
  args: args,
82
82
  exitstatus: exitstatus,
83
- all_test_file_paths: all_test_file_paths,
83
+ node_test_file_paths: node_test_file_paths,
84
84
  }
85
85
  end
86
86
  end
@@ -7,6 +7,10 @@ module KnapsackPro
7
7
  def self.run(args)
8
8
  require 'minitest'
9
9
 
10
+ # Avoid installing `at_exit` since we are calling `Minitest.run` ourselves.
11
+ # Without this, Minitest would run again (autorun) after `Minitest.run`.
12
+ ::Minitest.class_variable_set('@@installed_at_exit', true)
13
+
10
14
  ENV['KNAPSACK_PRO_TEST_SUITE_TOKEN'] = KnapsackPro::Config::Env.test_suite_token_minitest
11
15
  ENV['KNAPSACK_PRO_QUEUE_RECORDING_ENABLED'] = 'true'
12
16
  ENV['KNAPSACK_PRO_QUEUE_ID'] = KnapsackPro::Config::EnvGenerator.set_queue_id
@@ -28,7 +32,7 @@ module KnapsackPro
28
32
  can_initialize_queue: true,
29
33
  args: cli_args,
30
34
  exitstatus: 0,
31
- all_test_file_paths: [],
35
+ node_test_file_paths: [],
32
36
  }
33
37
  while accumulator[:status] == :next
34
38
  handle_signal!
@@ -43,15 +47,15 @@ module KnapsackPro
43
47
  can_initialize_queue = accumulator.fetch(:can_initialize_queue)
44
48
  args = accumulator.fetch(:args)
45
49
  exitstatus = accumulator.fetch(:exitstatus)
46
- all_test_file_paths = accumulator.fetch(:all_test_file_paths)
50
+ node_test_file_paths = accumulator.fetch(:node_test_file_paths)
47
51
 
48
52
  test_file_paths = runner.test_file_paths(
49
53
  can_initialize_queue: can_initialize_queue,
50
- executed_test_files: all_test_file_paths
54
+ executed_test_files: node_test_file_paths
51
55
  )
52
56
 
53
57
  if test_file_paths.empty?
54
- unless all_test_file_paths.empty?
58
+ unless node_test_file_paths.empty?
55
59
  KnapsackPro::Adapters::MinitestAdapter.verify_bind_method_called
56
60
  end
57
61
 
@@ -72,7 +76,7 @@ module KnapsackPro
72
76
 
73
77
  KnapsackPro::Hooks::Queue.call_before_subset_queue
74
78
 
75
- all_test_file_paths += test_file_paths
79
+ node_test_file_paths += test_file_paths
76
80
 
77
81
  result = minitest_run(runner, test_file_paths, args)
78
82
  exitstatus = 1 unless result
@@ -87,7 +91,7 @@ module KnapsackPro
87
91
  can_initialize_queue: false,
88
92
  args: args,
89
93
  exitstatus: exitstatus,
90
- all_test_file_paths: all_test_file_paths,
94
+ node_test_file_paths: node_test_file_paths,
91
95
  }
92
96
  end
93
97
  end