knapsack 1.14.1 → 1.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/.travis.yml +1 -2
- data/CHANGELOG.md +8 -0
- data/README.md +69 -8
- data/lib/knapsack/adapters/cucumber_adapter.rb +5 -1
- data/lib/knapsack/version.rb +1 -1
- data/spec/knapsack/adapters/cucumber_adapter_spec.rb +27 -4
- data/spec/support/fakes/cucumber.rb +14 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88a3472c6e1c45824bd4d8774fedf2fe49346094
|
4
|
+
data.tar.gz: 396262940e1fc174523938abb47274e8aad33e59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb192cc001f8201e14fb2a46811fd06ebb53be23f14b49ec81308bc0f35dccf726b0ad63cc3cbf3f191fc29ff44a56edd96e7694a42569bdcc67d8af479a11ad
|
7
|
+
data.tar.gz: dab3225d6b4833d4edb57880768c5fba4f9f64b59cb4b454b1b9d635759ff66937a42afcd2b8f235427a14a3952bfaee23eeb6aa06a179451e3e0f16e39d9676
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -12,6 +12,8 @@
|
|
12
12
|
[codeclimate]: https://codeclimate.com/github/ArturT/knapsack
|
13
13
|
[coverage]: https://codeclimate.com/github/ArturT/knapsack
|
14
14
|
|
15
|
+
Follow us on [Twitter @KnapsackPro](https://twitter.com/KnapsackPro) and give Like on [Facebook KnapsackPro](https://www.facebook.com/KnapsackPro)
|
16
|
+
|
15
17
|
**Knapsack splits tests across CI nodes and makes sure that tests will run comparable time on each node.**
|
16
18
|
|
17
19
|
Parallel tests across CI server nodes based on each test file's time execution. Knapsack generates a test time execution report and uses it for future test runs.
|
@@ -24,15 +26,21 @@ The knapsack gem supports:
|
|
24
26
|
* [Spinach](https://github.com/codegram/spinach)
|
25
27
|
* [Turnip](https://github.com/jnicklas/turnip)
|
26
28
|
|
27
|
-
### Without Knapsack
|
29
|
+
### Without Knapsack - bad test suite split
|
28
30
|
|
29
31
|

|
30
32
|
|
31
|
-
### With Knapsack
|
33
|
+
### With Knapsack - better test suite split
|
32
34
|
|
33
35
|

|
34
36
|
|
35
|
-
###
|
37
|
+
### With Knapsack Pro - optimal test suite split
|
38
|
+
|
39
|
+
[Watch 1 minute video how Queue Mode works](https://knapsackpro.com/?utm_source=github&utm_medium=readme&utm_campaign=knapsack_gem&utm_content=video#x-play-how-it-works-video)
|
40
|
+
|
41
|
+
[](https://knapsackpro.com/?utm_source=github&utm_medium=readme&utm_campaign=knapsack_gem&utm_content=video#x-play-how-it-works-video)
|
42
|
+
|
43
|
+
### Features in knapsack vs knapsack_pro
|
36
44
|
|
37
45
|
| Feature | knapsack gem | knapsack_pro gem
|
38
46
|
| --- | :---: | :---:
|
@@ -42,10 +50,6 @@ The knapsack gem supports:
|
|
42
50
|
| Test suite split based on most up to date tests time execution data | ✘ | ✔
|
43
51
|
| [Show all features](https://knapsackpro.com/features?utm_source=github&utm_medium=readme&utm_campaign=knapsack_gem&utm_content=show_all_features) | |
|
44
52
|
|
45
|
-
__Play video how dynamic rspec allocation works__
|
46
|
-
|
47
|
-
[](https://knapsackpro.com/?utm_source=github&utm_medium=readme&utm_campaign=knapsack_gem&utm_content=video#video)
|
48
|
-
|
49
53
|
How knapsack_pro makes my life easier as opposed to regular knapsack gem?
|
50
54
|
|
51
55
|
* The knapsack_pro version has queue mode designed for optimal test suite split thanks to dynamic tests allocation.
|
@@ -53,7 +57,7 @@ How knapsack_pro makes my life easier as opposed to regular knapsack gem?
|
|
53
57
|
* The knapsack_pro version tracks all you branches so when your test code changes the knapsack_pro tries to provide you as optimal test suite split as possible.
|
54
58
|
* When your test codebase changes over time you need to manually generate a new knapsack report in free gem version which is extra overhead and waste of time of the developer.
|
55
59
|
|
56
|
-
**
|
60
|
+
**Only [knapsack_pro gem](https://github.com/KnapsackPro/knapsack_pro-ruby) has Queue Mode feature that saves optimal amount of time? Please [visit Knapsack Pro](http://knapsackpro.com?utm_source=github&utm_medium=readme&utm_campaign=knapsack_gem&utm_content=try_knapsack_pro).**
|
57
61
|
|
58
62
|
### Presentations about knapsack gem
|
59
63
|
|
@@ -102,6 +106,7 @@ How knapsack_pro makes my life easier as opposed to regular knapsack gem?
|
|
102
106
|
- [What time offset warning means?](#what-time-offset-warning-means)
|
103
107
|
- [How to generate knapsack report?](#how-to-generate-knapsack-report)
|
104
108
|
- [What does "leftover specs" mean?](#what-does-leftover-specs-mean)
|
109
|
+
- [Why some of test files are still in "leftover specs" after I generate a new report?](#why-some-of-test-files-are-still-in-leftover-specs-after-i-generate-a-new-report)
|
105
110
|
- [How can I run tests from multiple directories?](#how-can-i-run-tests-from-multiple-directories)
|
106
111
|
- [How to update existing knapsack report for a few test files?](#how-to-update-existing-knapsack-report-for-a-few-test-files)
|
107
112
|
- [How to run tests for particular CI node in your development environment](#how-to-run-tests-for-particular-ci-node-in-your-development-environment)
|
@@ -356,6 +361,7 @@ Here is an example for test configuration in your `circleci.yml` file.
|
|
356
361
|
For the first time run all tests on a single CI node with enabled report generator.
|
357
362
|
|
358
363
|
```yaml
|
364
|
+
# CircleCI 1.0
|
359
365
|
test:
|
360
366
|
override:
|
361
367
|
# Step for RSpec
|
@@ -371,6 +377,37 @@ test:
|
|
371
377
|
- KNAPSACK_GENERATE_REPORT=true bundle exec spinach
|
372
378
|
```
|
373
379
|
|
380
|
+
```YAML
|
381
|
+
# CircleCI 2.0
|
382
|
+
- run:
|
383
|
+
name: Step for RSpec
|
384
|
+
command: |
|
385
|
+
# export word is important here!
|
386
|
+
export KNAPSACK_GENERATE_REPORT=true
|
387
|
+
bundle exec rspec spec
|
388
|
+
|
389
|
+
- run:
|
390
|
+
name: Step for Cucumber
|
391
|
+
command: |
|
392
|
+
# export word is important here!
|
393
|
+
export KNAPSACK_GENERATE_REPORT=true
|
394
|
+
bundle exec cucumber features
|
395
|
+
|
396
|
+
- run:
|
397
|
+
name: Step for Minitest
|
398
|
+
command: |
|
399
|
+
# export word is important here!
|
400
|
+
export KNAPSACK_GENERATE_REPORT=true
|
401
|
+
bundle exec rake test
|
402
|
+
|
403
|
+
- run:
|
404
|
+
name: Step for Spinach
|
405
|
+
command: |
|
406
|
+
# export word is important here!
|
407
|
+
export KNAPSACK_GENERATE_REPORT=true
|
408
|
+
bundle exec rspec spinach
|
409
|
+
```
|
410
|
+
|
374
411
|
After tests pass on your CircleCI machine your should copy knapsack json report which is rendered at the end of rspec/cucumber/minitest results. Save it into your repository as `knapsack_rspec_report.json`, `knapsack_cucumber_report.json`, `knapsack_minitest_report.json` or `knapsack_spinach_report.json` file and commit.
|
375
412
|
|
376
413
|
#### Step 2
|
@@ -378,6 +415,7 @@ After tests pass on your CircleCI machine your should copy knapsack json report
|
|
378
415
|
Now you should update test command and enable parallel. Please remember to add additional containers for your project in CircleCI settings.
|
379
416
|
|
380
417
|
```yaml
|
418
|
+
# CircleCI 1.0
|
381
419
|
test:
|
382
420
|
override:
|
383
421
|
# Step for RSpec
|
@@ -397,6 +435,25 @@ test:
|
|
397
435
|
parallel: true # Caution: there are 8 spaces indentation!
|
398
436
|
```
|
399
437
|
|
438
|
+
```YAML
|
439
|
+
# CircleCI 2.0
|
440
|
+
- run:
|
441
|
+
name: Step for RSpec
|
442
|
+
command: bundle exec rake knapsack:rspec
|
443
|
+
|
444
|
+
- run:
|
445
|
+
name: Step for Cucumber
|
446
|
+
command: bundle exec rake knapsack:cucumber
|
447
|
+
|
448
|
+
- run:
|
449
|
+
name: Step for Minitest
|
450
|
+
command: bundle exec rake knapsack:minitest
|
451
|
+
|
452
|
+
- run:
|
453
|
+
name: Step for Spinach
|
454
|
+
command: bundle exec rake knapsack:spinach
|
455
|
+
```
|
456
|
+
|
400
457
|
Now everything should works. You will get warning at the end of rspec/cucumber/minitest results if time execution will take too much.
|
401
458
|
|
402
459
|
### Info for Travis users
|
@@ -652,6 +709,10 @@ The leftover specs mean we don't have recorded time execution for those test fil
|
|
652
709
|
The reason might be that someone added a new test file after knapsack report was generated. Another reason might be an empty spec file.
|
653
710
|
If you have a lot of leftover specs then you can [generate knapsack report again](#how-to-generate-knapsack-report) to improve you test distribution across CI nodes.
|
654
711
|
|
712
|
+
### Why some of test files are still in "leftover specs" after I generate a new report?
|
713
|
+
|
714
|
+
If test file is empty or has only pending tests then it cannot be recorded so it will end up in leftovers specs list.
|
715
|
+
|
655
716
|
### How can I run tests from multiple directories?
|
656
717
|
|
657
718
|
The test file pattern config option supports any glob pattern handled by [`Dir.glob`](http://ruby-doc.org/core-2.2.0/Dir.html#method-c-glob) and can be configured to pull test files from multiple directories. An example of this when using RSpec would be `"{spec,engines/**/spec}/**{,/*/**}/*_spec.rb"`. For complex cases like this, the test directory can't be extracted and must be specified manually using the `KNAPSACK_TEST_DIR` environment variable:
|
@@ -61,7 +61,11 @@ module Knapsack
|
|
61
61
|
private
|
62
62
|
|
63
63
|
def Around(*tag_expressions, &proc)
|
64
|
-
::Cucumber::
|
64
|
+
if ::Cucumber::VERSION.to_i >= 3
|
65
|
+
::Cucumber::Glue::Dsl.register_rb_hook('around', tag_expressions, proc)
|
66
|
+
else
|
67
|
+
::Cucumber::RbSupport::RbDsl.register_rb_hook('around', tag_expressions, proc)
|
68
|
+
end
|
65
69
|
end
|
66
70
|
end
|
67
71
|
end
|
data/lib/knapsack/version.rb
CHANGED
@@ -1,11 +1,34 @@
|
|
1
1
|
describe Knapsack::Adapters::CucumberAdapter do
|
2
2
|
context do
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
context 'when Cucumber version 1' do
|
4
|
+
before do
|
5
|
+
stub_const('Cucumber::VERSION', '1.3.20')
|
6
|
+
allow(::Cucumber::RbSupport::RbDsl).to receive(:register_rb_hook)
|
7
|
+
allow(Kernel).to receive(:at_exit)
|
8
|
+
end
|
9
|
+
|
10
|
+
it_behaves_like 'adapter'
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when Cucumber version 2' do
|
14
|
+
before do
|
15
|
+
stub_const('Cucumber::VERSION', '2')
|
16
|
+
allow(::Cucumber::RbSupport::RbDsl).to receive(:register_rb_hook)
|
17
|
+
allow(Kernel).to receive(:at_exit)
|
18
|
+
end
|
19
|
+
|
20
|
+
it_behaves_like 'adapter'
|
6
21
|
end
|
7
22
|
|
8
|
-
|
23
|
+
context 'when Cucumber version 3' do
|
24
|
+
before do
|
25
|
+
stub_const('Cucumber::VERSION', '3.0.0')
|
26
|
+
allow(::Cucumber::Glue::Dsl).to receive(:register_rb_hook)
|
27
|
+
allow(Kernel).to receive(:at_exit)
|
28
|
+
end
|
29
|
+
|
30
|
+
it_behaves_like 'adapter'
|
31
|
+
end
|
9
32
|
end
|
10
33
|
|
11
34
|
describe 'bind methods' do
|
@@ -1,5 +1,6 @@
|
|
1
|
-
# https://github.com/cucumber/cucumber/blob/master/lib/cucumber/rb_support/rb_dsl.rb
|
2
1
|
module Cucumber
|
2
|
+
# Cucumber 1 and 2
|
3
|
+
# https://github.com/cucumber/cucumber-ruby/blob/v2.99.0/lib/cucumber/rb_support/rb_dsl.rb
|
3
4
|
module RbSupport
|
4
5
|
class RbDsl
|
5
6
|
class << self
|
@@ -9,4 +10,16 @@ module Cucumber
|
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
13
|
+
|
14
|
+
# Cucumber 3
|
15
|
+
# https://github.com/cucumber/cucumber-ruby/blob/v3.0.0/lib/cucumber/glue/dsl.rb
|
16
|
+
module Glue
|
17
|
+
class Dsl
|
18
|
+
class << self
|
19
|
+
def register_rb_hook(phase, tag_names, proc)
|
20
|
+
proc.call
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
12
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knapsack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -286,7 +286,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
286
286
|
version: '0'
|
287
287
|
requirements: []
|
288
288
|
rubyforge_project:
|
289
|
-
rubygems_version: 2.6.
|
289
|
+
rubygems_version: 2.6.13
|
290
290
|
signing_key:
|
291
291
|
specification_version: 4
|
292
292
|
summary: Knapsack splits tests across CI nodes and makes sure that tests will run
|