knapsack_pro 2.10.1 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +40 -0
- data/README.md +31 -1562
- data/lib/knapsack_pro/adapters/base_adapter.rb +22 -0
- data/lib/knapsack_pro/adapters/rspec_adapter.rb +6 -2
- data/lib/knapsack_pro/allocator.rb +1 -1
- data/lib/knapsack_pro/config/env.rb +1 -0
- data/lib/knapsack_pro/queue_allocator.rb +1 -1
- data/lib/knapsack_pro/report.rb +1 -1
- data/lib/knapsack_pro/runners/cucumber_runner.rb +4 -1
- data/lib/knapsack_pro/runners/minitest_runner.rb +4 -1
- data/lib/knapsack_pro/runners/queue/cucumber_runner.rb +4 -0
- data/lib/knapsack_pro/runners/queue/minitest_runner.rb +4 -0
- data/lib/knapsack_pro/runners/queue/rspec_runner.rb +25 -4
- data/lib/knapsack_pro/runners/rspec_runner.rb +4 -1
- data/lib/knapsack_pro/runners/spinach_runner.rb +4 -1
- data/lib/knapsack_pro/runners/test_unit_runner.rb +4 -1
- data/lib/knapsack_pro/slow_test_file_determiner.rb +1 -1
- data/lib/knapsack_pro/test_case_detectors/rspec_test_example_detector.rb +1 -1
- data/lib/knapsack_pro/tracker.rb +10 -6
- data/lib/knapsack_pro/version.rb +1 -1
- data/spec/knapsack_pro/adapters/base_adapter_spec.rb +51 -0
- data/spec/knapsack_pro/adapters/rspec_adapter_spec.rb +15 -9
- data/spec/knapsack_pro/runners/cucumber_runner_spec.rb +2 -0
- data/spec/knapsack_pro/runners/minitest_runner_spec.rb +4 -0
- data/spec/knapsack_pro/runners/queue/cucumber_runner_spec.rb +27 -7
- data/spec/knapsack_pro/runners/queue/minitest_runner_spec.rb +27 -7
- data/spec/knapsack_pro/runners/queue/rspec_runner_spec.rb +39 -7
- data/spec/knapsack_pro/runners/rspec_runner_spec.rb +2 -0
- data/spec/knapsack_pro/runners/spinach_runner_spec.rb +2 -0
- data/spec/knapsack_pro/runners/test_unit_runner_spec.rb +2 -0
- data/spec/knapsack_pro/tracker_spec.rb +7 -3
- metadata +5 -5
@@ -34,6 +34,8 @@ describe KnapsackPro::Runners::CucumberRunner do
|
|
34
34
|
let(:task) { double }
|
35
35
|
|
36
36
|
before do
|
37
|
+
expect(KnapsackPro::Adapters::CucumberAdapter).to receive(:verify_bind_method_called)
|
38
|
+
|
37
39
|
expect(Rake::Task).to receive(:[]).with('knapsack_pro:cucumber_run').at_least(1).and_return(task)
|
38
40
|
|
39
41
|
t = double
|
@@ -14,6 +14,10 @@ describe KnapsackPro::Runners::MinitestRunner do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
context 'when test files were returned by Knapsack Pro API' do
|
17
|
+
before do
|
18
|
+
expect(KnapsackPro::Adapters::MinitestAdapter).to receive(:verify_bind_method_called)
|
19
|
+
end
|
20
|
+
|
17
21
|
it 'runs tests' do
|
18
22
|
test_file_paths = ['test_fake/a_test.rb', 'test_fake/b_test.rb']
|
19
23
|
runner = instance_double(described_class,
|
@@ -167,14 +167,34 @@ describe KnapsackPro::Runners::Queue::CucumberRunner do
|
|
167
167
|
context "when test files don't exist" do
|
168
168
|
let(:test_file_paths) { [] }
|
169
169
|
|
170
|
-
|
171
|
-
|
172
|
-
expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
|
170
|
+
context 'when all_test_file_paths exist' do
|
171
|
+
let(:all_test_file_paths) { ['features/a.feature'] }
|
173
172
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
173
|
+
it 'returns exit code 0' do
|
174
|
+
expect(KnapsackPro::Adapters::CucumberAdapter).to receive(:verify_bind_method_called)
|
175
|
+
|
176
|
+
expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
|
177
|
+
expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
|
178
|
+
|
179
|
+
expect(subject).to eq({
|
180
|
+
status: :completed,
|
181
|
+
exitstatus: exitstatus,
|
182
|
+
})
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context "when all_test_file_paths don't exist" do
|
187
|
+
let(:all_test_file_paths) { [] }
|
188
|
+
|
189
|
+
it 'returns exit code 0' do
|
190
|
+
expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
|
191
|
+
expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
|
192
|
+
|
193
|
+
expect(subject).to eq({
|
194
|
+
status: :completed,
|
195
|
+
exitstatus: exitstatus,
|
196
|
+
})
|
197
|
+
end
|
178
198
|
end
|
179
199
|
end
|
180
200
|
end
|
@@ -159,14 +159,34 @@ describe KnapsackPro::Runners::Queue::MinitestRunner do
|
|
159
159
|
context "when test files don't exist" do
|
160
160
|
let(:test_file_paths) { [] }
|
161
161
|
|
162
|
-
|
163
|
-
|
164
|
-
expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
|
162
|
+
context 'when all_test_file_paths exist' do
|
163
|
+
let(:all_test_file_paths) { ['a_test.rb'] }
|
165
164
|
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
165
|
+
it 'returns exit code 0' do
|
166
|
+
expect(KnapsackPro::Adapters::MinitestAdapter).to receive(:verify_bind_method_called)
|
167
|
+
|
168
|
+
expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
|
169
|
+
expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
|
170
|
+
|
171
|
+
expect(subject).to eq({
|
172
|
+
status: :completed,
|
173
|
+
exitstatus: exitstatus,
|
174
|
+
})
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context "when all_test_file_paths don't exist" do
|
179
|
+
let(:all_test_file_paths) { [] }
|
180
|
+
|
181
|
+
it 'returns exit code 0' do
|
182
|
+
expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
|
183
|
+
expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
|
184
|
+
|
185
|
+
expect(subject).to eq({
|
186
|
+
status: :completed,
|
187
|
+
exitstatus: exitstatus,
|
188
|
+
})
|
189
|
+
end
|
170
190
|
end
|
171
191
|
end
|
172
192
|
end
|
@@ -30,7 +30,7 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
context 'when args provided' do
|
33
|
-
context 'when format
|
33
|
+
context 'when format option is not provided' do
|
34
34
|
let(:args) { '--example-arg example-value' }
|
35
35
|
|
36
36
|
it 'uses default formatter progress' do
|
@@ -55,10 +55,10 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
context 'when format
|
58
|
+
context 'when format option is provided as --format' do
|
59
59
|
let(:args) { '--format documentation' }
|
60
60
|
|
61
|
-
it 'uses provided format
|
61
|
+
it 'uses provided format option instead of default formatter progress' do
|
62
62
|
expected_exitstatus = 0
|
63
63
|
expected_accumulator = {
|
64
64
|
status: :completed,
|
@@ -80,10 +80,10 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
-
context 'when format
|
83
|
+
context 'when format option is provided as -f' do
|
84
84
|
let(:args) { '-f d' }
|
85
85
|
|
86
|
-
it 'uses provided format
|
86
|
+
it 'uses provided format option instead of default formatter progress' do
|
87
87
|
expected_exitstatus = 0
|
88
88
|
expected_accumulator = {
|
89
89
|
status: :completed,
|
@@ -105,10 +105,10 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
context 'when format
|
108
|
+
context 'when format option is provided without a delimiter' do
|
109
109
|
let(:args) { '-fMyCustomFormatter' }
|
110
110
|
|
111
|
-
it 'uses provided format
|
111
|
+
it 'uses provided format option instead of default formatter progress' do
|
112
112
|
expected_exitstatus = 0
|
113
113
|
expected_accumulator = {
|
114
114
|
status: :completed,
|
@@ -129,6 +129,36 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
129
129
|
subject
|
130
130
|
end
|
131
131
|
end
|
132
|
+
|
133
|
+
context 'when RSpec split by test examples feature is enabled' do
|
134
|
+
before do
|
135
|
+
expect(KnapsackPro::Config::Env).to receive(:rspec_split_by_test_examples?).and_return(true)
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'when tag option is provided as --tag' do
|
139
|
+
let(:args) { '--tag example-value' }
|
140
|
+
|
141
|
+
it do
|
142
|
+
expect { subject }.to raise_error(/It is not allowed to use the RSpec tag option together with the RSpec split by test examples feature/)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context 'when tag option is provided as -t' do
|
147
|
+
let(:args) { '-t example-value' }
|
148
|
+
|
149
|
+
it do
|
150
|
+
expect { subject }.to raise_error(/It is not allowed to use the RSpec tag option together with the RSpec split by test examples feature/)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
context 'when tag option is provided without delimiter' do
|
155
|
+
let(:args) { '-texample-value' }
|
156
|
+
|
157
|
+
it do
|
158
|
+
expect { subject }.to raise_error(/It is not allowed to use the RSpec tag option together with the RSpec split by test examples feature/)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
132
162
|
end
|
133
163
|
|
134
164
|
context 'when args not provided' do
|
@@ -249,6 +279,8 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
249
279
|
let(:all_test_file_paths) { ['a_spec.rb'] }
|
250
280
|
|
251
281
|
it do
|
282
|
+
expect(KnapsackPro::Adapters::RSpecAdapter).to receive(:verify_bind_method_called)
|
283
|
+
|
252
284
|
expect(KnapsackPro::Formatters::RSpecQueueSummaryFormatter).to receive(:print_summary)
|
253
285
|
expect(KnapsackPro::Formatters::RSpecQueueProfileFormatterExtension).to receive(:print_summary)
|
254
286
|
|
@@ -34,6 +34,8 @@ describe KnapsackPro::Runners::RSpecRunner do
|
|
34
34
|
let(:task) { double }
|
35
35
|
|
36
36
|
before do
|
37
|
+
expect(KnapsackPro::Adapters::RSpecAdapter).to receive(:verify_bind_method_called)
|
38
|
+
|
37
39
|
expect(Rake::Task).to receive(:[]).with('knapsack_pro:rspec_run').at_least(1).and_return(task)
|
38
40
|
|
39
41
|
t = double
|
@@ -26,6 +26,8 @@ describe KnapsackPro::Runners::SpinachRunner do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
before do
|
29
|
+
expect(KnapsackPro::Adapters::SpinachAdapter).to receive(:verify_bind_method_called)
|
30
|
+
|
29
31
|
expect(Kernel).to receive(:system).with('KNAPSACK_PRO_RECORDING_ENABLED=true KNAPSACK_PRO_TEST_SUITE_TOKEN=spinach-token bundle exec spinach --custom-arg --features_path fake-test-dir -- features/a.feature features/b.feature')
|
30
32
|
end
|
31
33
|
|
@@ -16,6 +16,8 @@ describe KnapsackPro::Runners::TestUnitRunner do
|
|
16
16
|
|
17
17
|
context 'when test files were returned by Knapsack Pro API' do
|
18
18
|
it 'runs tests' do
|
19
|
+
expect(KnapsackPro::Adapters::TestUnitAdapter).to receive(:verify_bind_method_called)
|
20
|
+
|
19
21
|
test_file_paths = ['test-unit_fake/a_test.rb', 'test-unit_fake/b_test.rb']
|
20
22
|
runner = instance_double(described_class,
|
21
23
|
test_dir: 'test-unit_fake',
|
@@ -12,9 +12,7 @@ describe KnapsackPro::Tracker do
|
|
12
12
|
subject { tracker.current_test_path }
|
13
13
|
|
14
14
|
context 'when current_test_path not set' do
|
15
|
-
it
|
16
|
-
expect { subject }.to raise_error("current_test_path needs to be set by Knapsack Pro Adapter's bind method")
|
17
|
-
end
|
15
|
+
it { expect(subject).to be_nil }
|
18
16
|
end
|
19
17
|
|
20
18
|
context 'when current_test_path set' do
|
@@ -58,6 +56,9 @@ describe KnapsackPro::Tracker do
|
|
58
56
|
it { expect(tracker.test_files_with_time.keys.size).to eql 2 }
|
59
57
|
it { expect(tracker.test_files_with_time['a_spec.rb'][:time_execution]).to be_within(delta).of(0.1) }
|
60
58
|
it { expect(tracker.test_files_with_time['b_spec.rb'][:time_execution]).to be_within(delta).of(0.2) }
|
59
|
+
it 'resets current_test_path after time is measured' do
|
60
|
+
expect(tracker.current_test_path).to be_nil
|
61
|
+
end
|
61
62
|
it_behaves_like '#to_a'
|
62
63
|
end
|
63
64
|
|
@@ -83,6 +84,9 @@ describe KnapsackPro::Tracker do
|
|
83
84
|
it { expect(tracker.test_files_with_time.keys.size).to eql 2 }
|
84
85
|
it { expect(tracker.test_files_with_time['a_spec.rb'][:time_execution]).to be_within(delta).of(0) }
|
85
86
|
it { expect(tracker.test_files_with_time['b_spec.rb'][:time_execution]).to be_within(delta).of(0) }
|
87
|
+
it 'resets current_test_path after time is measured' do
|
88
|
+
expect(tracker.current_test_path).to be_nil
|
89
|
+
end
|
86
90
|
it_behaves_like '#to_a'
|
87
91
|
end
|
88
92
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knapsack_pro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -408,7 +408,7 @@ metadata:
|
|
408
408
|
documentation_uri: https://docs.knapsackpro.com/integration/
|
409
409
|
homepage_uri: https://knapsackpro.com
|
410
410
|
source_code_uri: https://github.com/KnapsackPro/knapsack_pro-ruby
|
411
|
-
post_install_message:
|
411
|
+
post_install_message:
|
412
412
|
rdoc_options: []
|
413
413
|
require_paths:
|
414
414
|
- lib
|
@@ -424,7 +424,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
424
424
|
version: '0'
|
425
425
|
requirements: []
|
426
426
|
rubygems_version: 3.0.6
|
427
|
-
signing_key:
|
427
|
+
signing_key:
|
428
428
|
specification_version: 4
|
429
429
|
summary: Knapsack Pro splits tests across parallel CI nodes and ensures each parallel
|
430
430
|
job finish work at a similar time.
|