knapsack 1.10.0 → 1.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +28 -0
- data/CHANGELOG.md +8 -0
- data/README.md +77 -8
- data/bin/knapsack +1 -0
- data/knapsack.gemspec +1 -0
- data/knapsack_spinach_report.json +4 -0
- data/lib/knapsack.rb +2 -0
- data/lib/knapsack/adapters/spinach_adapter.rb +45 -0
- data/lib/knapsack/runners/spinach_runner.rb +22 -0
- data/lib/knapsack/version.rb +1 -1
- data/lib/tasks/knapsack_spinach.rake +7 -0
- data/spec/knapsack/adapters/spinach_adapter_spec.rb +84 -0
- data/spec/knapsack/task_loader_spec.rb +2 -0
- data/spinach_examples/scenario1.feature +6 -0
- data/spinach_examples/scenario2.feature +6 -0
- data/spinach_examples/steps/test_how_spinach_works_for_first_test.rb +13 -0
- data/spinach_examples/steps/test_how_spinach_works_for_second_test.rb +13 -0
- data/spinach_examples/support/env.rb +4 -0
- metadata +27 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 586b4f20bd1e8eeaa8cecd582028c38bbda68798
|
4
|
+
data.tar.gz: ba890d94aeb726731268b2138c81106c8d1dd21b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d826026f771d18064f2fc0c4fd48f41b0193d015f1c655bee098c8e887665271245ef1293140347a49ebb93b1b34868ed05f1c1ff5342374eb6dd8bc8c80d1f
|
7
|
+
data.tar.gz: f92c71f48e7a86142903714034d2e1e6a08412592159e544159d89b01bc3841008d173d2fe461ab6597961533d2c8e9ec246f163b7cec046dc86d65075c1784c
|
data/.travis.yml
CHANGED
@@ -53,6 +53,7 @@ script:
|
|
53
53
|
- bin/print_header.sh "Run specs from multiple directories with manually specified test_dir"
|
54
54
|
- KNAPSACK_TEST_DIR=spec_examples KNAPSACK_TEST_FILE_PATTERN="{spec_examples,spec_engine_examples}/**{,/*/**}/*_spec.rb" bundle exec rake knapsack:rspec
|
55
55
|
|
56
|
+
|
56
57
|
- bin/print_header.sh "------------------------------------------------------"
|
57
58
|
|
58
59
|
|
@@ -82,5 +83,32 @@ script:
|
|
82
83
|
- bin/print_header.sh "Run tests when test file was removed and still exists in knapsack report json"
|
83
84
|
- rm test_examples/fast/unit_test.rb
|
84
85
|
- KNAPSACK_TEST_FILE_PATTERN="test_examples/**{,/*/**}/*_test.rb" bundle exec rake knapsack:minitest
|
86
|
+
|
87
|
+
|
88
|
+
- bin/print_header.sh "------------------------------------------------------"
|
89
|
+
|
90
|
+
|
91
|
+
# Tests for example spinach test suite
|
92
|
+
- bin/print_header.sh "Generate knapsack report"
|
93
|
+
- KNAPSACK_GENERATE_REPORT=true bundle exec spinach -f spinach_examples
|
94
|
+
|
95
|
+
- bin/print_header.sh "Run tests with enabled time offset warning"
|
96
|
+
- bundle exec spinach -f spinach_examples
|
97
|
+
|
98
|
+
- bin/print_header.sh "Run rake task for the first CI node"
|
99
|
+
- CI_NODE_TOTAL=2 CI_NODE_INDEX=0 KNAPSACK_TEST_FILE_PATTERN="spinach_examples/**{,/*/**}/*.feature" bundle exec rake "knapsack:spinach[-f spinach_examples]"
|
100
|
+
- bin/print_header.sh "Run rake task for the second CI node"
|
101
|
+
- CI_NODE_TOTAL=2 CI_NODE_INDEX=1 KNAPSACK_TEST_FILE_PATTERN="spinach_examples/**{,/*/**}/*.feature" bundle exec rake "knapsack:spinach[-f spinach_examples]"
|
102
|
+
|
103
|
+
- bin/print_header.sh "Run tests with custom knapsack logger"
|
104
|
+
- CUSTOM_LOGGER=true KNAPSACK_TEST_FILE_PATTERN="spinach_examples/**{,/*/**}/*.feature" bundle exec rake "knapsack:spinach[-f spinach_examples]"
|
105
|
+
|
106
|
+
- bin/print_header.sh "Run tests for custom knapsack report path"
|
107
|
+
- cp knapsack_spinach_report.json knapsack_custom_spinach_report.json
|
108
|
+
- KNAPSACK_REPORT_PATH="knapsack_custom_spinach_report.json" KNAPSACK_TEST_FILE_PATTERN="spinach_examples/**{,/*/**}/*.feature" bundle exec rake "knapsack:spinach[-f spinach_examples]"
|
109
|
+
|
110
|
+
- bin/print_header.sh "Run tests when test file was removed and still exists in knapsack report json"
|
111
|
+
- rm spinach_examples/scenario1.feature
|
112
|
+
- KNAPSACK_TEST_FILE_PATTERN="spinach_examples/**{,/*/**}/*.feature" bundle exec rake "knapsack:spinach[-f spinach_examples]"
|
85
113
|
notifications:
|
86
114
|
email: false
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -42,6 +42,7 @@ Presentations about gem:
|
|
42
42
|
- [Step for RSpec](#step-for-rspec)
|
43
43
|
- [Step for Cucumber](#step-for-cucumber)
|
44
44
|
- [Step for Minitest](#step-for-minitest)
|
45
|
+
- [Step for Spinach](#step-for-spinach)
|
45
46
|
- [Custom configuration](#custom-configuration)
|
46
47
|
- [Common step](#common-step)
|
47
48
|
- [Adding or removing tests](#adding-or-removing-tests)
|
@@ -51,6 +52,7 @@ Presentations about gem:
|
|
51
52
|
- [Passing arguments to rspec](#passing-arguments-to-rspec)
|
52
53
|
- [Passing arguments to cucumber](#passing-arguments-to-cucumber)
|
53
54
|
- [Passing arguments to minitest](#passing-arguments-to-minitest)
|
55
|
+
- [Passing arguments to spinach](#passing-arguments-to-spinach)
|
54
56
|
- [Knapsack binary](#knapsack-binary)
|
55
57
|
- [Info for CircleCI users](#info-for-circleci-users)
|
56
58
|
- [Step 1](#step-1)
|
@@ -150,9 +152,21 @@ knapsack_adapter = Knapsack::Adapters::MinitestAdapter.bind
|
|
150
152
|
knapsack_adapter.set_test_helper_path(__FILE__)
|
151
153
|
```
|
152
154
|
|
155
|
+
### Step for Spinach
|
156
|
+
|
157
|
+
Create file `features/support/env.rb` and add there:
|
158
|
+
|
159
|
+
```ruby
|
160
|
+
require 'knapsack'
|
161
|
+
|
162
|
+
# CUSTOM_CONFIG_GOES_HERE
|
163
|
+
|
164
|
+
Knapsack::Adapters::SpinachAdapter.bind
|
165
|
+
```
|
166
|
+
|
153
167
|
### Custom configuration
|
154
168
|
|
155
|
-
You can change default Knapsack configuration for RSpec, Cucumber or
|
169
|
+
You can change default Knapsack configuration for RSpec, Cucumber, Minitest or Spinach tests. Here are examples what you can do. Put below configuration instead of `CUSTOM_CONFIG_GOES_HERE`.
|
156
170
|
|
157
171
|
```ruby
|
158
172
|
Knapsack.tracker.config({
|
@@ -184,7 +198,10 @@ Generate time execution report for your test files. Run below command on one of
|
|
184
198
|
# Step for Minitest
|
185
199
|
$ KNAPSACK_GENERATE_REPORT=true bundle exec rake test
|
186
200
|
|
187
|
-
|
201
|
+
# Step for Spinach
|
202
|
+
$ KNAPSACK_GENERATE_REPORT=true bundle exec spinach
|
203
|
+
|
204
|
+
Commit generated report `knapsack_rspec_report.json`, `knapsack_cucumber_report.json`, `knapsack_minitest_report.json` or `knapsack_spinach_report.json` into your repository.
|
188
205
|
|
189
206
|
This report should be updated only after you add a lot of new slow tests or you change existing ones which causes a big time execution difference between CI nodes. Either way, you will get time offset warning at the end of the rspec/cucumber/minitest results which reminds you when it’s a good time to regenerate the knapsack report.
|
190
207
|
|
@@ -211,6 +228,9 @@ On your CI server run this command for the first CI node. Update `CI_NODE_INDEX`
|
|
211
228
|
# Step for Minitest
|
212
229
|
$ CI_NODE_TOTAL=2 CI_NODE_INDEX=0 bundle exec rake knapsack:minitest
|
213
230
|
|
231
|
+
# Step for Spinach
|
232
|
+
$ CI_NODE_TOTAL=2 CI_NODE_INDEX=0 bundle exec rake knapsack:spinach
|
233
|
+
|
214
234
|
You can add `KNAPSACK_TEST_FILE_PATTERN` if your tests are not in default directory. For instance:
|
215
235
|
|
216
236
|
# Step for RSpec
|
@@ -222,6 +242,9 @@ You can add `KNAPSACK_TEST_FILE_PATTERN` if your tests are not in default direct
|
|
222
242
|
# Step for Minitest
|
223
243
|
$ KNAPSACK_TEST_FILE_PATTERN="directory_with_tests/**{,/*/**}/*_spec.rb" CI_NODE_TOTAL=2 CI_NODE_INDEX=0 bundle exec rake knapsack:minitest
|
224
244
|
|
245
|
+
# Step for Spinach
|
246
|
+
$ KNAPSACK_TEST_FILE_PATTERN="directory_with_features/**/*.feature" CI_NODE_TOTAL=2 CI_NODE_INDEX=0 bundle exec rake knapsack:spinach
|
247
|
+
|
225
248
|
You can set `KNAPSACK_REPORT_PATH` if your knapsack report was saved in non default location. Example:
|
226
249
|
|
227
250
|
# Step for RSpec
|
@@ -233,6 +256,9 @@ You can set `KNAPSACK_REPORT_PATH` if your knapsack report was saved in non defa
|
|
233
256
|
# Step for Minitest
|
234
257
|
$ KNAPSACK_REPORT_PATH="knapsack_custom_report.json" CI_NODE_TOTAL=2 CI_NODE_INDEX=0 bundle exec rake knapsack:minitest
|
235
258
|
|
259
|
+
# Step for Spinach
|
260
|
+
$ KNAPSACK_REPORT_PATH="knapsack_custom_report.json" CI_NODE_TOTAL=2 CI_NODE_INDEX=0 bundle exec rake knapsack:spinach
|
261
|
+
|
236
262
|
### Info about ENV variables
|
237
263
|
|
238
264
|
`CI_NODE_TOTAL` - total number CI nodes you have.
|
@@ -269,6 +295,12 @@ For instance to run verbose tests:
|
|
269
295
|
|
270
296
|
$ bundle exec rake "knapsack:minitest[--verbose]"
|
271
297
|
|
298
|
+
#### Passing arguments to spinach
|
299
|
+
|
300
|
+
Add arguments to knapsack spinach task like this:
|
301
|
+
|
302
|
+
$ bundle exec rake "knapsack:spinach[--name feature]"
|
303
|
+
|
272
304
|
### Knapsack binary
|
273
305
|
|
274
306
|
You can install knapsack globally and use binary. For instance:
|
@@ -276,6 +308,7 @@ You can install knapsack globally and use binary. For instance:
|
|
276
308
|
$ knapsack rspec "--tag custom_tag_name --profile"
|
277
309
|
$ knapsack cucumber
|
278
310
|
$ knapsack minitest "--verbose --pride"
|
311
|
+
$ knapsack spinach "-f spinach_examples"
|
279
312
|
|
280
313
|
[Here](https://github.com/ArturT/knapsack/pull/21) you will find example when it might be useful.
|
281
314
|
|
@@ -300,9 +333,12 @@ test:
|
|
300
333
|
|
301
334
|
# Step for Minitest
|
302
335
|
- KNAPSACK_GENERATE_REPORT=true bundle exec rake test
|
336
|
+
|
337
|
+
# Step for Spinach
|
338
|
+
- KNAPSACK_GENERATE_REPORT=true bundle exec spinach
|
303
339
|
```
|
304
340
|
|
305
|
-
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` or `
|
341
|
+
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.
|
306
342
|
|
307
343
|
#### Step 2
|
308
344
|
|
@@ -322,6 +358,10 @@ test:
|
|
322
358
|
# Step for Minitest
|
323
359
|
- bundle exec rake knapsack:minitest:
|
324
360
|
parallel: true # Caution: there are 8 spaces indentation!
|
361
|
+
|
362
|
+
# Step for Spinach
|
363
|
+
- bundle exec rake knapsack:spinach:
|
364
|
+
parallel: true # Caution: there are 8 spaces indentation!
|
325
365
|
```
|
326
366
|
|
327
367
|
Now everything should works. You will get warning at the end of rspec/cucumber/minitest results if time execution will take too much.
|
@@ -342,9 +382,12 @@ script:
|
|
342
382
|
|
343
383
|
# Step for Minitest
|
344
384
|
- "KNAPSACK_GENERATE_REPORT=true bundle exec rake test"
|
385
|
+
|
386
|
+
# Step for Spinach
|
387
|
+
- "KNAPSACK_GENERATE_REPORT=true bundle exec spinach"
|
345
388
|
```
|
346
389
|
|
347
|
-
After tests pass 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` or `
|
390
|
+
After tests pass 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.
|
348
391
|
|
349
392
|
#### Step 2
|
350
393
|
|
@@ -361,6 +404,9 @@ script:
|
|
361
404
|
# Step for Minitest
|
362
405
|
- "bundle exec rake knapsack:minitest"
|
363
406
|
|
407
|
+
# Step for Spinach
|
408
|
+
- "bundle exec rake knapsack:spinach"
|
409
|
+
|
364
410
|
env:
|
365
411
|
- CI_NODE_TOTAL=2 CI_NODE_INDEX=0
|
366
412
|
- CI_NODE_TOTAL=2 CI_NODE_INDEX=1
|
@@ -379,6 +425,9 @@ script:
|
|
379
425
|
# Step for Minitest
|
380
426
|
- "bundle exec rake knapsack:minitest"
|
381
427
|
|
428
|
+
# Step for Spinach
|
429
|
+
- "bundle exec rake knapsack:spinach"
|
430
|
+
|
382
431
|
env:
|
383
432
|
global:
|
384
433
|
- RAILS_ENV=test
|
@@ -411,7 +460,10 @@ For the first time run all tests at once with enabled report generator. Set up y
|
|
411
460
|
# Step for Minitest
|
412
461
|
KNAPSACK_GENERATE_REPORT=true bundle exec rake test
|
413
462
|
|
414
|
-
|
463
|
+
# Step for Spinach
|
464
|
+
KNAPSACK_GENERATE_REPORT=true bundle exec spinach
|
465
|
+
|
466
|
+
After tests pass your should copy knapsack json report which is rendered at the end of rspec/cucumber/test 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.
|
415
467
|
|
416
468
|
#### Step 2
|
417
469
|
|
@@ -424,6 +476,8 @@ Knapsack supports semaphoreapp ENVs `SEMAPHORE_THREAD_COUNT` and `SEMAPHORE_CURR
|
|
424
476
|
bundle exec rake knapsack:cucumber
|
425
477
|
## Step for Minitest
|
426
478
|
bundle exec rake knapsack:minitest
|
479
|
+
## Step for Spinach
|
480
|
+
bundle exec rake knapsack:spinach
|
427
481
|
|
428
482
|
# Thread 2
|
429
483
|
## Step for RSpec
|
@@ -432,6 +486,8 @@ Knapsack supports semaphoreapp ENVs `SEMAPHORE_THREAD_COUNT` and `SEMAPHORE_CURR
|
|
432
486
|
bundle exec rake knapsack:cucumber
|
433
487
|
## Step for Minitest
|
434
488
|
bundle exec rake knapsack:minitest
|
489
|
+
## Step for Spinach
|
490
|
+
bundle exec rake knapsack:spinach
|
435
491
|
|
436
492
|
Tests will be split across threads.
|
437
493
|
|
@@ -450,7 +506,10 @@ For the first time run all tests at once with enabled report generator. Run the
|
|
450
506
|
# Step for Minitest
|
451
507
|
KNAPSACK_GENERATE_REPORT=true bundle exec rake test
|
452
508
|
|
453
|
-
|
509
|
+
# Step for Spinach
|
510
|
+
KNAPSACK_GENERATE_REPORT=true bundle exec spinach
|
511
|
+
|
512
|
+
After tests pass 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.
|
454
513
|
|
455
514
|
#### Step 2
|
456
515
|
|
@@ -465,6 +524,9 @@ Knapsack supports buildkite ENVs `BUILDKITE_PARALLEL_JOB_COUNT` and `BUILDKITE_P
|
|
465
524
|
# Step for Minitest
|
466
525
|
bundle exec rake knapsack:minitest
|
467
526
|
|
527
|
+
# Step for Spinach
|
528
|
+
bundle exec rake knapsack:spinach
|
529
|
+
|
468
530
|
### Info for snap-ci.com users
|
469
531
|
|
470
532
|
#### Step 1
|
@@ -480,7 +542,10 @@ For the first time run all tests at once with enabled report generator. Run the
|
|
480
542
|
# Step for Minitest
|
481
543
|
KNAPSACK_GENERATE_REPORT=true bundle exec rake test
|
482
544
|
|
483
|
-
|
545
|
+
# Step for Spinach
|
546
|
+
KNAPSACK_GENERATE_REPORT=true bundle exec spinach
|
547
|
+
|
548
|
+
After tests pass 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.
|
484
549
|
|
485
550
|
#### Step 2
|
486
551
|
|
@@ -495,6 +560,9 @@ Knapsack supports snap-ci.com ENVs `SNAP_WORKER_TOTAL` and `SNAP_WORKER_INDEX`.
|
|
495
560
|
# Step for Minitest
|
496
561
|
bundle exec rake knapsack:minitest
|
497
562
|
|
563
|
+
# Step for Spinach
|
564
|
+
bundle exec rake knapsack:spinach
|
565
|
+
|
498
566
|
## FAQ
|
499
567
|
|
500
568
|
### What time offset warning means?
|
@@ -582,7 +650,8 @@ Specs in `spec_examples/leftover` take more than 3 seconds. This should cause a
|
|
582
650
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
583
651
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
584
652
|
4. Push to the branch (`git push origin my-new-feature`)
|
585
|
-
5.
|
653
|
+
5. You can create example tests in related repository with example of [rails application and knapsack gem usage](https://github.com/KnapsackPro/rails-app-with-knapsack).
|
654
|
+
6. Create a new Pull Request
|
586
655
|
|
587
656
|
## Acknowledgements
|
588
657
|
|
data/bin/knapsack
CHANGED
data/knapsack.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'rspec', '~> 3.0', '>= 2.0.0'
|
26
26
|
spec.add_development_dependency 'rspec-its', '~> 1.2'
|
27
27
|
spec.add_development_dependency 'cucumber', '>= 0'
|
28
|
+
spec.add_development_dependency 'spinach', '>= 0.8'
|
28
29
|
spec.add_development_dependency 'minitest', '>= 5.0.0'
|
29
30
|
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0'
|
30
31
|
spec.add_development_dependency 'pry', '~> 0'
|
data/lib/knapsack.rb
CHANGED
@@ -18,9 +18,11 @@ require_relative 'knapsack/adapters/base_adapter'
|
|
18
18
|
require_relative 'knapsack/adapters/rspec_adapter'
|
19
19
|
require_relative 'knapsack/adapters/cucumber_adapter'
|
20
20
|
require_relative 'knapsack/adapters/minitest_adapter'
|
21
|
+
require_relative 'knapsack/adapters/spinach_adapter'
|
21
22
|
require_relative 'knapsack/runners/rspec_runner'
|
22
23
|
require_relative 'knapsack/runners/cucumber_runner'
|
23
24
|
require_relative 'knapsack/runners/minitest_runner'
|
25
|
+
require_relative 'knapsack/runners/spinach_runner'
|
24
26
|
|
25
27
|
module Knapsack
|
26
28
|
class << self
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spinach'
|
2
|
+
|
3
|
+
module Knapsack
|
4
|
+
module Adapters
|
5
|
+
class SpinachAdapter < BaseAdapter
|
6
|
+
TEST_DIR_PATTERN = 'features/**{,/*/**}/*.feature'
|
7
|
+
REPORT_PATH = 'knapsack_spinach_report.json'
|
8
|
+
|
9
|
+
def bind_time_tracker
|
10
|
+
Spinach.hooks.before_scenario do |scenario_data, step_definitions|
|
11
|
+
Knapsack.tracker.test_path = SpinachAdapter.test_path(scenario_data)
|
12
|
+
Knapsack.tracker.start_timer
|
13
|
+
end
|
14
|
+
|
15
|
+
Spinach.hooks.after_scenario do
|
16
|
+
Knapsack.tracker.stop_timer
|
17
|
+
end
|
18
|
+
|
19
|
+
Spinach.hooks.after_run do
|
20
|
+
Knapsack.logger.info(Presenter.global_time)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def bind_report_generator
|
25
|
+
Spinach.hooks.after_run do
|
26
|
+
Knapsack.report.save
|
27
|
+
Knapsack.logger.info(Presenter.report_details)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def bind_time_offset_warning
|
32
|
+
Spinach.hooks.after_run do
|
33
|
+
Knapsack.logger.log(
|
34
|
+
Presenter.time_offset_log_level,
|
35
|
+
Presenter.time_offset_warning
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.test_path(scenario)
|
41
|
+
scenario.feature.filename
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Knapsack
|
2
|
+
module Runners
|
3
|
+
class SpinachRunner
|
4
|
+
def self.run(args)
|
5
|
+
allocator = Knapsack::AllocatorBuilder.new(Knapsack::Adapters::SpinachAdapter).allocator
|
6
|
+
|
7
|
+
Knapsack.logger.info
|
8
|
+
Knapsack.logger.info 'Report features:'
|
9
|
+
Knapsack.logger.info allocator.report_node_tests
|
10
|
+
Knapsack.logger.info
|
11
|
+
Knapsack.logger.info 'Leftover features:'
|
12
|
+
Knapsack.logger.info allocator.leftover_node_tests
|
13
|
+
Knapsack.logger.info
|
14
|
+
|
15
|
+
cmd = %Q[bundle exec spinach #{args} -- #{allocator.stringify_node_tests}]
|
16
|
+
|
17
|
+
system(cmd)
|
18
|
+
exit($?.exitstatus) unless $?.exitstatus.zero?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/knapsack/version.rb
CHANGED
@@ -0,0 +1,84 @@
|
|
1
|
+
describe Knapsack::Adapters::SpinachAdapter do
|
2
|
+
context do
|
3
|
+
it_behaves_like 'adapter'
|
4
|
+
end
|
5
|
+
|
6
|
+
describe 'bind methods' do
|
7
|
+
let(:config) { double }
|
8
|
+
let(:logger) { instance_double(Knapsack::Logger) }
|
9
|
+
|
10
|
+
before do
|
11
|
+
expect(Knapsack).to receive(:logger).and_return(logger)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#bind_time_tracker' do
|
15
|
+
let(:tracker) { instance_double(Knapsack::Tracker) }
|
16
|
+
let(:test_path) { 'spec/a_spec.rb' }
|
17
|
+
let(:global_time) { 'Global time: 01m 05s' }
|
18
|
+
let(:example_group) { double }
|
19
|
+
let(:scenario_data) do
|
20
|
+
double(feature: double(filename: 'a_spec.rb'))
|
21
|
+
end
|
22
|
+
|
23
|
+
it do
|
24
|
+
allow(Knapsack).to receive(:tracker).and_return(tracker)
|
25
|
+
|
26
|
+
expect(Spinach.hooks).to receive(:before_scenario).and_yield(scenario_data, nil)
|
27
|
+
expect(described_class).to receive(:test_path).with(scenario_data).and_return(test_path)
|
28
|
+
expect(tracker).to receive(:test_path=).with(test_path)
|
29
|
+
expect(tracker).to receive(:start_timer)
|
30
|
+
|
31
|
+
expect(Spinach.hooks).to receive(:after_scenario).and_yield
|
32
|
+
expect(tracker).to receive(:stop_timer)
|
33
|
+
|
34
|
+
expect(Spinach.hooks).to receive(:after_run).and_yield
|
35
|
+
expect(Knapsack::Presenter).to receive(:global_time).and_return(global_time)
|
36
|
+
expect(logger).to receive(:info).with(global_time)
|
37
|
+
|
38
|
+
subject.bind_time_tracker
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#bind_report_generator' do
|
43
|
+
let(:report) { instance_double(Knapsack::Report) }
|
44
|
+
let(:report_details) { 'Report details' }
|
45
|
+
|
46
|
+
it do
|
47
|
+
expect(Spinach.hooks).to receive(:after_run).and_yield
|
48
|
+
|
49
|
+
expect(Knapsack).to receive(:report).and_return(report)
|
50
|
+
expect(report).to receive(:save)
|
51
|
+
|
52
|
+
expect(Knapsack::Presenter).to receive(:report_details).and_return(report_details)
|
53
|
+
expect(logger).to receive(:info).with(report_details)
|
54
|
+
|
55
|
+
subject.bind_report_generator
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#bind_time_offset_warning' do
|
60
|
+
let(:time_offset_warning) { 'Time offset warning' }
|
61
|
+
let(:log_level) { :info }
|
62
|
+
|
63
|
+
it do
|
64
|
+
expect(Spinach.hooks).to receive(:after_run).and_yield
|
65
|
+
|
66
|
+
expect(Knapsack::Presenter).to receive(:time_offset_warning).and_return(time_offset_warning)
|
67
|
+
expect(Knapsack::Presenter).to receive(:time_offset_log_level).and_return(log_level)
|
68
|
+
expect(logger).to receive(:log).with(log_level, time_offset_warning)
|
69
|
+
|
70
|
+
subject.bind_time_offset_warning
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '.test_path' do
|
76
|
+
let(:scenario_data) do
|
77
|
+
double(feature: double(filename: 'a_spec.rb'))
|
78
|
+
end
|
79
|
+
|
80
|
+
subject { described_class.test_path(scenario_data) }
|
81
|
+
|
82
|
+
it { should eql 'a_spec.rb' }
|
83
|
+
end
|
84
|
+
end
|
@@ -2,11 +2,13 @@ describe Knapsack::TaskLoader do
|
|
2
2
|
describe '#load_tasks' do
|
3
3
|
let(:rspec_rake_task_path) { "#{Knapsack.root}/lib/tasks/knapsack_rspec.rake" }
|
4
4
|
let(:cucumber_rake_task_path) { "#{Knapsack.root}/lib/tasks/knapsack_cucumber.rake" }
|
5
|
+
let(:spinach_rake_task_path) { "#{Knapsack.root}/lib/tasks/knapsack_spinach.rake" }
|
5
6
|
let(:minitest_rake_task_path) { "#{Knapsack.root}/lib/tasks/knapsack_minitest.rake" }
|
6
7
|
|
7
8
|
it do
|
8
9
|
expect(subject).to receive(:import).with(rspec_rake_task_path)
|
9
10
|
expect(subject).to receive(:import).with(cucumber_rake_task_path)
|
11
|
+
expect(subject).to receive(:import).with(spinach_rake_task_path)
|
10
12
|
expect(subject).to receive(:import).with(minitest_rake_task_path)
|
11
13
|
subject.load_tasks
|
12
14
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Spinach::Features::TestHowSpinachWorksForFirstTest < Spinach::FeatureSteps
|
2
|
+
step 'I have an empty array' do
|
3
|
+
end
|
4
|
+
|
5
|
+
step 'I append my first name and my last name to it' do
|
6
|
+
end
|
7
|
+
|
8
|
+
step 'I pass it to my super-duper method' do
|
9
|
+
end
|
10
|
+
|
11
|
+
step 'the output should contain a formal greeting' do
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Spinach::Features::TestHowSpinachWorksForSecondTest < Spinach::FeatureSteps
|
2
|
+
step 'I have an empty array' do
|
3
|
+
end
|
4
|
+
|
5
|
+
step 'I append only my first name to it' do
|
6
|
+
end
|
7
|
+
|
8
|
+
step 'I pass it to my super-duper method' do
|
9
|
+
end
|
10
|
+
|
11
|
+
step 'the output should contain a casual greeting' do
|
12
|
+
end
|
13
|
+
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.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -100,6 +100,20 @@ dependencies:
|
|
100
100
|
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: spinach
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.8'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0.8'
|
103
117
|
- !ruby/object:Gem::Dependency
|
104
118
|
name: minitest
|
105
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -174,11 +188,13 @@ files:
|
|
174
188
|
- knapsack.gemspec
|
175
189
|
- knapsack_minitest_report.json
|
176
190
|
- knapsack_rspec_report.json
|
191
|
+
- knapsack_spinach_report.json
|
177
192
|
- lib/knapsack.rb
|
178
193
|
- lib/knapsack/adapters/base_adapter.rb
|
179
194
|
- lib/knapsack/adapters/cucumber_adapter.rb
|
180
195
|
- lib/knapsack/adapters/minitest_adapter.rb
|
181
196
|
- lib/knapsack/adapters/rspec_adapter.rb
|
197
|
+
- lib/knapsack/adapters/spinach_adapter.rb
|
182
198
|
- lib/knapsack/allocator.rb
|
183
199
|
- lib/knapsack/allocator_builder.rb
|
184
200
|
- lib/knapsack/config/env.rb
|
@@ -192,16 +208,19 @@ files:
|
|
192
208
|
- lib/knapsack/runners/cucumber_runner.rb
|
193
209
|
- lib/knapsack/runners/minitest_runner.rb
|
194
210
|
- lib/knapsack/runners/rspec_runner.rb
|
211
|
+
- lib/knapsack/runners/spinach_runner.rb
|
195
212
|
- lib/knapsack/task_loader.rb
|
196
213
|
- lib/knapsack/tracker.rb
|
197
214
|
- lib/knapsack/version.rb
|
198
215
|
- lib/tasks/knapsack_cucumber.rake
|
199
216
|
- lib/tasks/knapsack_minitest.rake
|
200
217
|
- lib/tasks/knapsack_rspec.rake
|
218
|
+
- lib/tasks/knapsack_spinach.rake
|
201
219
|
- spec/knapsack/adapters/base_adapter_spec.rb
|
202
220
|
- spec/knapsack/adapters/cucumber_adapter_spec.rb
|
203
221
|
- spec/knapsack/adapters/minitest_adapter_spec.rb
|
204
222
|
- spec/knapsack/adapters/rspec_adapter_spec.rb
|
223
|
+
- spec/knapsack/adapters/spinach_adapter_spec.rb
|
205
224
|
- spec/knapsack/allocator_builder_spec.rb
|
206
225
|
- spec/knapsack/allocator_spec.rb
|
207
226
|
- spec/knapsack/config/env_spec.rb
|
@@ -235,6 +254,11 @@ files:
|
|
235
254
|
- spec_examples/slow/c_spec.rb
|
236
255
|
- spec_examples/spec_helper.rb
|
237
256
|
- spec_examples/support/shared_examples/common_example.rb
|
257
|
+
- spinach_examples/scenario1.feature
|
258
|
+
- spinach_examples/scenario2.feature
|
259
|
+
- spinach_examples/steps/test_how_spinach_works_for_first_test.rb
|
260
|
+
- spinach_examples/steps/test_how_spinach_works_for_second_test.rb
|
261
|
+
- spinach_examples/support/env.rb
|
238
262
|
- test_examples/fast/spec_test.rb
|
239
263
|
- test_examples/fast/unit_test.rb
|
240
264
|
- test_examples/slow/slow_test.rb
|
@@ -269,6 +293,7 @@ test_files:
|
|
269
293
|
- spec/knapsack/adapters/cucumber_adapter_spec.rb
|
270
294
|
- spec/knapsack/adapters/minitest_adapter_spec.rb
|
271
295
|
- spec/knapsack/adapters/rspec_adapter_spec.rb
|
296
|
+
- spec/knapsack/adapters/spinach_adapter_spec.rb
|
272
297
|
- spec/knapsack/allocator_builder_spec.rb
|
273
298
|
- spec/knapsack/allocator_spec.rb
|
274
299
|
- spec/knapsack/config/env_spec.rb
|