test_suite_splitter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,97 @@
1
+ require "spec_helper"
2
+
3
+ describe TestSuiteSplitter::RspecHelper do
4
+ describe "#rspec_options" do
5
+ it "forwards the tag command to rspec" do
6
+ helper = TestSuiteSplitter::RspecHelper.new(groups: 4, group_number: 2, tags: ["~@firefox_skip", "asd"])
7
+ rspec_options = helper.__send__(:rspec_options)
8
+ expect(rspec_options).to eq ["--dry-run", "--format", "json", "--tag", "~@firefox_skip", "--tag", "asd", "spec"]
9
+ end
10
+
11
+ it "doesnt include the tag argument if nothing is given" do
12
+ helper = TestSuiteSplitter::RspecHelper.new(groups: 4, group_number: 2)
13
+ rspec_options = helper.__send__(:rspec_options)
14
+ expect(rspec_options).to eq ["--dry-run", "--format", "json", "spec"]
15
+ end
16
+ end
17
+
18
+ it "selects only given types" do
19
+ helper = TestSuiteSplitter::RspecHelper.new(groups: 4, group_number: 2, only_types: ["system"])
20
+
21
+ ignore_models = helper.__send__(:ignore_type?, "models")
22
+ ignore_system = helper.__send__(:ignore_type?, "system")
23
+
24
+ expect(ignore_models).to eq true
25
+ expect(ignore_system).to eq false
26
+ end
27
+
28
+ describe "#ignore_type?" do
29
+ it "ignores types not given" do
30
+ helper = TestSuiteSplitter::RspecHelper.new(groups: 1, group_number: 1, only_types: ["system"])
31
+
32
+ expect(helper.__send__(:ignore_type?, "system")).to eq false
33
+ expect(helper.__send__(:ignore_type?, "model")).to eq true
34
+ end
35
+ end
36
+
37
+ describe "#sorted_files" do
38
+ it "falls back to sort the files by name" do
39
+ helper = TestSuiteSplitter::RspecHelper.new(groups: 4, group_number: 2)
40
+
41
+ expect(helper).to receive(:files).and_return(
42
+ "specs/file_b_spec.rb" => {
43
+ examples: 1,
44
+ path: "specs/file_b_spec.rb",
45
+ points: 1
46
+ },
47
+ "specs/file_c_spec.rb" => {
48
+ examples: 1,
49
+ path: "specs/file_c_spec.rb",
50
+ points: 1
51
+ },
52
+ "specs/file_a_spec.rb" => {
53
+ examples: 1,
54
+ path: "specs/file_a_spec.rb",
55
+ points: 1
56
+ }
57
+ )
58
+
59
+ files = helper.sorted_files.map { |file| file.fetch(:path) }
60
+
61
+ expect(files).to eq [
62
+ "specs/file_a_spec.rb",
63
+ "specs/file_b_spec.rb",
64
+ "specs/file_c_spec.rb"
65
+ ]
66
+ end
67
+
68
+ it "doesnt duplicate the same specs in multiple groups" do
69
+ require "json"
70
+
71
+ helpers = [
72
+ TestSuiteSplitter::RspecHelper.new(groups: 4, group_number: 1),
73
+ TestSuiteSplitter::RspecHelper.new(groups: 4, group_number: 2),
74
+ TestSuiteSplitter::RspecHelper.new(groups: 4, group_number: 3),
75
+ TestSuiteSplitter::RspecHelper.new(groups: 4, group_number: 4)
76
+ ]
77
+
78
+ nemoa_rspec_output = JSON.parse(File.read("spec/test_suite_splitter/rspec_helper/nemoa_rspec_output.json"))
79
+
80
+ expect(helpers).to all(receive(:dry_result).and_return(nemoa_rspec_output))
81
+
82
+ file_groups = helpers.map { |helper| helper.__send__(:group_files) }
83
+
84
+ file_groups.each_with_index do |file_group1, index1|
85
+ file_group1.each do |file_name1|
86
+ file_groups.each_with_index do |file_group2, index2|
87
+ next if index1 == index2
88
+
89
+ file_group2.each do |file_name2|
90
+ raise "Found fine in both #{index1} and #{index2}: #{file_name1}" if file_name1 == file_name2
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,65 @@
1
+ # Generated by juwelier
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: test_suite_splitter 0.0.1 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "test_suite_splitter".freeze
9
+ s.version = "0.0.1"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["kaspernj".freeze]
14
+ s.date = "2021-11-17"
15
+ s.description = "Split your RSpec test suite up into several groups and run them in parallel.".freeze
16
+ s.email = "k@spernj.org".freeze
17
+ s.executables = ["test_suite_splitter".freeze]
18
+ s.extra_rdoc_files = [
19
+ "LICENSE.txt",
20
+ "README.rdoc"
21
+ ]
22
+ s.files = [
23
+ ".document",
24
+ ".rubocop.yml",
25
+ "Gemfile",
26
+ "Gemfile.lock",
27
+ "LICENSE.txt",
28
+ "README.rdoc",
29
+ "Rakefile",
30
+ "VERSION",
31
+ "bin/test_suite_splitter",
32
+ "lib/test_suite_splitter.rb",
33
+ "lib/test_suite_splitter/rspec_helper.rb",
34
+ "peak_flow.yml",
35
+ "spec/spec_helper.rb",
36
+ "spec/test_suite_splitter/rspec_helper/nemoa_rspec_output.json",
37
+ "spec/test_suite_splitter/rspec_helper_spec.rb",
38
+ "test_suite_splitter.gemspec"
39
+ ]
40
+ s.homepage = "http://github.com/kaspernj/test_suite_splitter".freeze
41
+ s.licenses = ["MIT".freeze]
42
+ s.rubygems_version = "3.1.6".freeze
43
+ s.summary = "Split your RSpec test suite up into several groups and run them in parallel.".freeze
44
+
45
+ if s.respond_to? :specification_version then
46
+ s.specification_version = 4
47
+ end
48
+
49
+ if s.respond_to? :add_runtime_dependency then
50
+ s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
51
+ s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
52
+ s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
53
+ s.add_development_dependency(%q<rubocop>.freeze, [">= 0"])
54
+ s.add_development_dependency(%q<rubocop-performance>.freeze, [">= 0"])
55
+ s.add_development_dependency(%q<rubocop-rspec>.freeze, [">= 0"])
56
+ else
57
+ s.add_dependency(%q<bundler>.freeze, [">= 0"])
58
+ s.add_dependency(%q<juwelier>.freeze, [">= 0"])
59
+ s.add_dependency(%q<rspec>.freeze, [">= 0"])
60
+ s.add_dependency(%q<rubocop>.freeze, [">= 0"])
61
+ s.add_dependency(%q<rubocop-performance>.freeze, [">= 0"])
62
+ s.add_dependency(%q<rubocop-rspec>.freeze, [">= 0"])
63
+ end
64
+ end
65
+
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: test_suite_splitter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - kaspernj
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-11-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: juwelier
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-performance
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Split your RSpec test suite up into several groups and run them in parallel.
98
+ email: k@spernj.org
99
+ executables:
100
+ - test_suite_splitter
101
+ extensions: []
102
+ extra_rdoc_files:
103
+ - LICENSE.txt
104
+ - README.rdoc
105
+ files:
106
+ - ".document"
107
+ - ".rubocop.yml"
108
+ - Gemfile
109
+ - Gemfile.lock
110
+ - LICENSE.txt
111
+ - README.rdoc
112
+ - Rakefile
113
+ - VERSION
114
+ - bin/test_suite_splitter
115
+ - lib/test_suite_splitter.rb
116
+ - lib/test_suite_splitter/rspec_helper.rb
117
+ - peak_flow.yml
118
+ - spec/spec_helper.rb
119
+ - spec/test_suite_splitter/rspec_helper/nemoa_rspec_output.json
120
+ - spec/test_suite_splitter/rspec_helper_spec.rb
121
+ - test_suite_splitter.gemspec
122
+ homepage: http://github.com/kaspernj/test_suite_splitter
123
+ licenses:
124
+ - MIT
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubygems_version: 3.1.6
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Split your RSpec test suite up into several groups and run them in parallel.
145
+ test_files: []