rspeed 0.4.0 → 0.5.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 +16 -0
- data/README.md +11 -7
- data/lib/generators/rspeed/install_generator.rb +1 -1
- data/lib/rspeed.rb +8 -6
- data/lib/rspeed/env.rb +43 -0
- data/lib/rspeed/extension.rb +3 -2
- data/lib/rspeed/observer.rb +17 -3
- data/lib/rspeed/redis.rb +55 -0
- data/lib/rspeed/runner.rb +3 -18
- data/lib/rspeed/splitter.rb +29 -52
- data/lib/rspeed/variable.rb +31 -0
- data/lib/rspeed/version.rb +1 -1
- data/spec/common_helper.rb +10 -0
- data/spec/fixtures/empty.rb +4 -0
- data/spec/models/rspeed/env/db_spec.rb +17 -0
- data/spec/models/rspeed/env/host_spec.rb +17 -0
- data/spec/models/rspeed/env/name_spec.rb +17 -0
- data/spec/models/rspeed/env/pipe_spec.rb +19 -0
- data/spec/models/rspeed/env/pipes_spec.rb +41 -0
- data/spec/models/rspeed/env/port_spec.rb +17 -0
- data/spec/models/rspeed/env/result_key_spec.rb +19 -0
- data/spec/models/rspeed/env/rspeed_spec.rb +43 -0
- data/spec/models/rspeed/env/tmp_spec.rb +19 -0
- data/spec/models/rspeed/observer/after_spec.rb +0 -2
- data/spec/models/rspeed/observer/after_suite_spec.rb +46 -0
- data/spec/models/rspeed/observer/before_spec.rb +0 -2
- data/spec/models/rspeed/observer/before_suite_spec.rb +24 -2
- data/spec/models/rspeed/redis/clean_pipes_flag_spec.rb +14 -0
- data/spec/models/rspeed/redis/client_spec.rb +7 -0
- data/spec/models/rspeed/redis/destroy_spec.rb +29 -0
- data/spec/models/rspeed/redis/get_spec.rb +9 -0
- data/spec/models/rspeed/redis/keys_spec.rb +29 -0
- data/spec/models/rspeed/redis/result_spec.rb +13 -0
- data/spec/models/rspeed/redis/set_spec.rb +9 -0
- data/spec/models/rspeed/redis/specs_finished_spec.rb +19 -0
- data/spec/models/rspeed/redis/specs_initiated_spec.rb +13 -0
- data/spec/models/rspeed/runner/run_spec.rb +30 -0
- data/spec/models/rspeed/splitter/actual_examples_spec.rb +6 -2
- data/spec/models/rspeed/splitter/append_spec.rb +1 -3
- data/spec/models/rspeed/splitter/diff_spec.rb +1 -3
- data/spec/models/rspeed/splitter/first_pipe_spec.rb +2 -4
- data/spec/models/rspeed/splitter/get_spec.rb +7 -9
- data/spec/models/rspeed/splitter/pipe_files_spec.rb +26 -0
- data/spec/models/rspeed/splitter/redundant_run_spec.rb +45 -0
- data/spec/models/rspeed/splitter/rename_spec.rb +3 -5
- data/spec/models/rspeed/splitter/split_spec.rb +70 -34
- data/spec/models/rspeed/variable/append_name_spec.rb +19 -0
- data/spec/models/rspeed/variable/csv_spec.rb +5 -0
- data/spec/models/rspeed/variable/default_partner_spec.rb +5 -0
- data/spec/models/rspeed/variable/key_spec.rb +15 -0
- data/spec/models/rspeed/variable/pipe_name_spec.rb +15 -0
- data/spec/models/rspeed/variable/pipes_pattern_spec.rb +5 -0
- data/spec/models/rspeed/variable/result_spec.rb +19 -0
- data/spec/models/rspeed/variable/tmp_spec.rb +15 -0
- data/spec/{rails_helper.rb → spec_helper.rb} +2 -22
- data/spec/support/common.rb +13 -0
- data/spec/support/coverage.rb +14 -0
- data/spec/support/env_mock.rb +3 -0
- data/spec/support/fakeredis.rb +3 -0
- metadata +137 -20
- data/spec/models/rspeed/splitter/destroy_spec.rb +0 -33
- data/spec/models/rspeed/splitter/keys_spec.rb +0 -33
- data/spec/models/rspeed/splitter/last_pipe_spec.rb +0 -21
- data/spec/models/rspeed/splitter/pipe_spec.rb +0 -21
- data/spec/models/rspeed/splitter/pipes_spec.rb +0 -27
- data/spec/models/rspeed/splitter/result_spec.rb +0 -19
- data/spec/models/rspeed/splitter/save_spec.rb +0 -57
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Redis, '.keys' do
|
4
|
+
subject(:redis) { described_class }
|
5
|
+
|
6
|
+
context 'with default config' do
|
7
|
+
before do
|
8
|
+
described_class.set('rspeed_1', 'value_1')
|
9
|
+
described_class.set('rspeed_2', 'value_2')
|
10
|
+
described_class.set('rspeed_3', 'value_3')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'shows keys' do
|
14
|
+
expect(redis.keys).to eq %w[rspeed_1 rspeed_2 rspeed_3]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'with custom key' do
|
19
|
+
before do
|
20
|
+
described_class.set('custom_key_1', 'value_1')
|
21
|
+
described_class.set('custom_key_2', 'value_2')
|
22
|
+
described_class.set('custom_key_3', 'value_3')
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'shows keys' do
|
26
|
+
expect(redis.keys('custom_key_*')).to eq %w[custom_key_1 custom_key_2 custom_key_3]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Redis, '#result?' do
|
4
|
+
context 'when has no key rspeed on redis' do
|
5
|
+
it { expect(described_class.result?).to be(false) }
|
6
|
+
end
|
7
|
+
|
8
|
+
context 'when has key rspeed on redis' do
|
9
|
+
before { described_class.set('rspeed', { files: [[1, '1_spec.rb']], number: 0, total: 1 }.to_json) }
|
10
|
+
|
11
|
+
it { expect(described_class.result?).to be(true) }
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Redis, '.specs_finished?' do
|
4
|
+
before do
|
5
|
+
described_class.set('rspeed_pipe_1', '1.0')
|
6
|
+
|
7
|
+
allow(RSpeed::Env).to receive(:pipes).and_return(2)
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'when the quantity of pipe result is not the same as the quantity of pipes' do
|
11
|
+
it { expect(described_class.specs_finished?).to be(false) }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'when the quantity of pipe result is the same as the quantity of pipes' do
|
15
|
+
before { described_class.set('rspeed_pipe_2', '2.0') }
|
16
|
+
|
17
|
+
it { expect(described_class.specs_finished?).to be(true) }
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Redis, '.specs_initiated?' do
|
4
|
+
context 'when has no pipe flag key' do
|
5
|
+
it { expect(described_class.specs_finished?).to be(false) }
|
6
|
+
end
|
7
|
+
|
8
|
+
context 'when has at least one pipe flag key' do
|
9
|
+
before { described_class.set('rspeed_pipe_1', '1.0') }
|
10
|
+
|
11
|
+
it { expect(described_class.specs_finished?).to be(true) }
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Runner, '#run' do
|
4
|
+
let!(:shell) { double('shell') }
|
5
|
+
let!(:splitter) { instance_double('RSpeed::Splitter') }
|
6
|
+
|
7
|
+
before { allow(RSpeed::Splitter).to receive(:new).and_return(splitter) }
|
8
|
+
|
9
|
+
context 'when is a redundant run' do
|
10
|
+
before { allow(splitter).to receive(:redundant_run?).and_return(true) }
|
11
|
+
|
12
|
+
it 'aborts the run' do
|
13
|
+
expect(described_class.run(shell)).to be(nil)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when is not a redundant run' do
|
18
|
+
before do
|
19
|
+
allow(splitter).to receive(:redundant_run?).and_return(false)
|
20
|
+
allow(shell).to receive(:call)
|
21
|
+
allow(splitter).to receive(:pipe_files).and_return('spec_1.rb spec_2.rb')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'run the pipe specs' do
|
25
|
+
described_class.run(shell)
|
26
|
+
|
27
|
+
expect(shell).to have_received(:call).with('bundle exec rspec spec_1.rb spec_2.rb')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
3
|
RSpec.describe RSpeed::Splitter, '#actual_examples' do
|
6
4
|
it 'returns all examples' do
|
7
5
|
splitter = described_class.new(specs_path: 'spec/fixtures/**/*_spec.rb')
|
@@ -19,4 +17,10 @@ RSpec.describe RSpeed::Splitter, '#actual_examples' do
|
|
19
17
|
|
20
18
|
expect(splitter.actual_examples).to eq []
|
21
19
|
end
|
20
|
+
|
21
|
+
it 'does not raise when file is empty' do
|
22
|
+
splitter = described_class.new(specs_path: 'spec/fixtures/**/empty.rb')
|
23
|
+
|
24
|
+
expect(splitter.actual_examples).to eq []
|
25
|
+
end
|
22
26
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
3
|
RSpec.describe RSpeed::Splitter, '#append' do
|
6
4
|
subject(:splitter) { described_class.new }
|
7
5
|
|
@@ -10,7 +8,7 @@ RSpec.describe RSpeed::Splitter, '#append' do
|
|
10
8
|
|
11
9
|
expect(splitter.get('rspeed_tmp')).to eq [
|
12
10
|
'{"file":"2_spec.rb","time":2.0}',
|
13
|
-
'{"file":"1_spec.rb","time":1.0}'
|
11
|
+
'{"file":"1_spec.rb","time":1.0}',
|
14
12
|
]
|
15
13
|
end
|
16
14
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
3
|
RSpec.describe RSpeed::Splitter, '#diff' do
|
6
4
|
subject(:splitter) { described_class.new(specs_path: './spec/fixtures/*_spec.rb') }
|
7
5
|
|
@@ -15,7 +13,7 @@ RSpec.describe RSpeed::Splitter, '#diff' do
|
|
15
13
|
redis.lpush 'rspeed', { file: './spec/fixtures/2_spec.rb:666', time: '6' }.to_json
|
16
14
|
redis.lpush 'rspeed', { file: './spec/fixtures/x_spec.rb:1', time: 3 }.to_json
|
17
15
|
|
18
|
-
File.open('spec/fixtures/new_spec.rb', 'a') { |file| file.write(
|
16
|
+
File.open('spec/fixtures/new_spec.rb', 'a') { |file| file.write('it') }
|
19
17
|
end
|
20
18
|
|
21
19
|
after { delete_file('spec/fixtures/new_spec.rb') }
|
@@ -1,18 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
3
|
RSpec.describe RSpeed::Splitter, '.first_pipe?' do
|
6
4
|
subject(:splitter) { described_class.new }
|
7
5
|
|
8
6
|
context 'when pipe env is 1' do
|
9
|
-
before { allow(
|
7
|
+
before { allow(RSpeed::Env).to receive(:pipe).and_return 1 }
|
10
8
|
|
11
9
|
it { expect(splitter.first_pipe?).to eq true }
|
12
10
|
end
|
13
11
|
|
14
12
|
context 'when pipe env is not 1' do
|
15
|
-
before { allow(
|
13
|
+
before { allow(RSpeed::Env).to receive(:pipe).and_return 2 }
|
16
14
|
|
17
15
|
it { expect(splitter.first_pipe?).to eq false }
|
18
16
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
3
|
RSpec.describe RSpeed::Splitter, '#get' do
|
6
4
|
subject(:splitter) { described_class.new }
|
7
5
|
|
@@ -18,14 +16,14 @@ RSpec.describe RSpeed::Splitter, '#get' do
|
|
18
16
|
{
|
19
17
|
'files' => [[1, '1_spec.rb'], [2, '2_spec.rb']],
|
20
18
|
'number' => 0,
|
21
|
-
'total' => 3
|
19
|
+
'total' => 3,
|
22
20
|
},
|
23
21
|
|
24
22
|
{
|
25
23
|
'files' => [[3, '3_spec.rb']],
|
26
24
|
'number' => 1,
|
27
|
-
'total' => 3
|
28
|
-
}
|
25
|
+
'total' => 3,
|
26
|
+
},
|
29
27
|
]
|
30
28
|
end
|
31
29
|
end
|
@@ -40,8 +38,8 @@ RSpec.describe RSpeed::Splitter, '#get' do
|
|
40
38
|
{
|
41
39
|
'files' => [[1, '1_spec.rb'], [2, '2_spec.rb']],
|
42
40
|
'number' => 0,
|
43
|
-
'total' => 3
|
44
|
-
}
|
41
|
+
'total' => 3,
|
42
|
+
},
|
45
43
|
]
|
46
44
|
end
|
47
45
|
end
|
@@ -55,7 +53,7 @@ RSpec.describe RSpeed::Splitter, '#get' do
|
|
55
53
|
it 'executes the right fetch method' do
|
56
54
|
expect(splitter.get('rspeed')).to eq [
|
57
55
|
'{"file":"2_spec.rb","time":2}',
|
58
|
-
'{"file":"1_spec.rb","time":1}'
|
56
|
+
'{"file":"1_spec.rb","time":1}',
|
59
57
|
]
|
60
58
|
end
|
61
59
|
end
|
@@ -69,7 +67,7 @@ RSpec.describe RSpeed::Splitter, '#get' do
|
|
69
67
|
it 'executes the right fetch method' do
|
70
68
|
expect(splitter.get('rspeed_tmp')).to eq [
|
71
69
|
'{"file":"2_spec.rb","time":2}',
|
72
|
-
'{"file":"1_spec.rb","time":1}'
|
70
|
+
'{"file":"1_spec.rb","time":1}',
|
73
71
|
]
|
74
72
|
end
|
75
73
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Splitter, '#pipe_files' do
|
4
|
+
let!(:shell) { double('shell') }
|
5
|
+
let!(:splitter) { described_class.new }
|
6
|
+
|
7
|
+
before { allow(RSpeed::Env).to receive(:pipe).and_return(1) }
|
8
|
+
|
9
|
+
context 'when has no result' do
|
10
|
+
before { allow(RSpeed::Redis).to receive(:result?).and_return(false) }
|
11
|
+
|
12
|
+
it { expect(splitter.pipe_files).to be(nil) }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when has result' do
|
16
|
+
before do
|
17
|
+
allow(RSpeed::Redis).to receive(:result?).and_return(true)
|
18
|
+
|
19
|
+
allow(splitter).to receive(:split).and_return(rspeed_1: { files: [{ file: 'spec_1.rb' }, { file: 'spec_2.rb' }] })
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns the splitted pipe files' do
|
23
|
+
expect(splitter.pipe_files).to eq 'spec_1.rb spec_2.rb'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RSpeed::Splitter, '.redundant_run?' do
|
4
|
+
subject(:splitter) { described_class.new }
|
5
|
+
|
6
|
+
context 'when is not pipe 1' do
|
7
|
+
before { allow(RSpeed::Env).to receive(:pipe).and_return(2) }
|
8
|
+
|
9
|
+
context 'when result key exists' do
|
10
|
+
let!(:redis) { redis_object }
|
11
|
+
|
12
|
+
before do
|
13
|
+
redis.set('rspeed', '{}')
|
14
|
+
|
15
|
+
allow(RSpeed::Env).to receive(:pipe).and_return(2)
|
16
|
+
end
|
17
|
+
|
18
|
+
it { expect(splitter.redundant_run?).to be(false) }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when result key does not exist' do
|
22
|
+
it { expect(splitter.redundant_run?).to be(true) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when is the first pipe' do
|
27
|
+
before { allow(RSpeed::Env).to receive(:pipe).and_return(1) }
|
28
|
+
|
29
|
+
context 'when result key exists' do
|
30
|
+
let!(:redis) { redis_object }
|
31
|
+
|
32
|
+
before do
|
33
|
+
redis.set('rspeed', '{}')
|
34
|
+
|
35
|
+
allow(RSpeed::Env).to receive(:pipe).and_return(2)
|
36
|
+
end
|
37
|
+
|
38
|
+
it { expect(splitter.redundant_run?).to be(false) }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when result key does not exist' do
|
42
|
+
it { expect(splitter.redundant_run?).to be(false) }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,18 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
3
|
RSpec.describe RSpeed::Splitter, '#rename' do
|
6
4
|
subject(:splitter) { described_class.new }
|
7
5
|
|
8
6
|
let!(:redis) { redis_object }
|
9
7
|
|
10
|
-
before { redis.lpush
|
8
|
+
before { redis.lpush('rspeed_tmp', { file: '1_spec.rb', time: 1.0 }.to_json) }
|
11
9
|
|
12
10
|
it 'renames the key' do
|
13
11
|
splitter.rename
|
14
12
|
|
15
|
-
expect(redis.lrange('rspeed_tmp', 0, -1)).to eq
|
16
|
-
expect(redis.lrange('rspeed', 0, -1)).to eq
|
13
|
+
expect(redis.lrange('rspeed_tmp', 0, -1)).to eq([])
|
14
|
+
expect(redis.lrange('rspeed', 0, -1)).to eq(['{"file":"1_spec.rb","time":1.0}'])
|
17
15
|
end
|
18
16
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
3
|
RSpec.describe RSpeed::Splitter, '.split' do
|
6
4
|
subject(:splitter) { described_class.new }
|
7
5
|
|
@@ -17,37 +15,75 @@ RSpec.describe RSpeed::Splitter, '.split' do
|
|
17
15
|
]
|
18
16
|
end
|
19
17
|
|
20
|
-
before { allow(
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
18
|
+
before { allow(RSpeed::Env).to receive(:pipes).and_return 3 }
|
19
|
+
|
20
|
+
context 'when diff is given' do
|
21
|
+
it 'splits the times between the pipes' do
|
22
|
+
expect(splitter.split(unsorted_data)).to eq(
|
23
|
+
rspeed_1: {
|
24
|
+
files: [{ file: './spec/2_0_spec.rb', time: 2.0 }],
|
25
|
+
number: 1,
|
26
|
+
total: 2.0,
|
27
|
+
},
|
28
|
+
|
29
|
+
rspeed_2: {
|
30
|
+
files: [
|
31
|
+
{ file: './spec/1_5_spec.rb', time: 1.5 },
|
32
|
+
{ file: './spec/0_4_spec.rb', time: 0.4 },
|
33
|
+
{ file: './spec/0_2_spec.rb', time: 0.2 },
|
34
|
+
],
|
35
|
+
|
36
|
+
number: 2,
|
37
|
+
total: 1.5 + 0.4 + 0.2, # 1.5 -> 1.9 -> 2.1
|
38
|
+
},
|
39
|
+
|
40
|
+
rspeed_3: {
|
41
|
+
files: [
|
42
|
+
{ file: './spec/1_1_spec.rb', time: 1.1 },
|
43
|
+
{ file: './spec/0_7_spec.rb', time: 0.7 },
|
44
|
+
{ file: './spec/0_3_spec.rb', time: 0.3 },
|
45
|
+
],
|
46
|
+
|
47
|
+
number: 3,
|
48
|
+
total: 1.1 + 0.7 + 0.3, # 1.1 -> 1.8 -> 2.1
|
49
|
+
}
|
50
|
+
)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when diff is not given' do
|
55
|
+
before { allow(splitter).to receive(:diff).and_return(unsorted_data) }
|
56
|
+
|
57
|
+
it 'splits the diff result into times between the pipes' do
|
58
|
+
expect(splitter.split).to eq(
|
59
|
+
rspeed_1: {
|
60
|
+
files: [{ file: './spec/2_0_spec.rb', time: 2.0 }],
|
61
|
+
number: 1,
|
62
|
+
total: 2.0,
|
63
|
+
},
|
64
|
+
|
65
|
+
rspeed_2: {
|
66
|
+
files: [
|
67
|
+
{ file: './spec/1_5_spec.rb', time: 1.5 },
|
68
|
+
{ file: './spec/0_4_spec.rb', time: 0.4 },
|
69
|
+
{ file: './spec/0_2_spec.rb', time: 0.2 },
|
70
|
+
],
|
71
|
+
|
72
|
+
number: 2,
|
73
|
+
total: 1.5 + 0.4 + 0.2, # 1.5 -> 1.9 -> 2.1
|
74
|
+
},
|
75
|
+
|
76
|
+
rspeed_3: {
|
77
|
+
files: [
|
78
|
+
{ file: './spec/1_1_spec.rb', time: 1.1 },
|
79
|
+
{ file: './spec/0_7_spec.rb', time: 0.7 },
|
80
|
+
{ file: './spec/0_3_spec.rb', time: 0.3 },
|
81
|
+
],
|
82
|
+
|
83
|
+
number: 3,
|
84
|
+
total: 1.1 + 0.7 + 0.3, # 1.1 -> 1.8 -> 2.1
|
85
|
+
}
|
86
|
+
)
|
87
|
+
end
|
52
88
|
end
|
53
89
|
end
|