rubocop-rspec 1.4.1 → 1.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.
@@ -12,8 +12,13 @@ describe RuboCop::Cop::RSpec::DescribeClass do
12
12
  end
13
13
 
14
14
  it 'checks describe statements after a require' do
15
- inspect_source(cop, ["require 'spec_helper'",
16
- 'describe "bad describe" do; end'])
15
+ inspect_source(
16
+ cop,
17
+ [
18
+ "require 'spec_helper'",
19
+ 'describe "bad describe" do; end'
20
+ ]
21
+ )
17
22
  expect(cop.offenses.size).to eq(1)
18
23
  expect(cop.offenses.map(&:line).sort).to eq([2])
19
24
  expect(cop.messages).to eq(['The first argument to describe should be ' \
@@ -21,9 +26,14 @@ describe RuboCop::Cop::RSpec::DescribeClass do
21
26
  end
22
27
 
23
28
  it 'ignores nested describe statements' do
24
- inspect_source(cop, ['describe Some::Class do',
25
- ' describe "bad describe" do; end',
26
- 'end'])
29
+ inspect_source(
30
+ cop,
31
+ [
32
+ 'describe Some::Class do',
33
+ ' describe "bad describe" do; end',
34
+ 'end'
35
+ ]
36
+ )
27
37
  expect(cop.offenses).to be_empty
28
38
  end
29
39
 
@@ -38,9 +48,14 @@ describe RuboCop::Cop::RSpec::DescribeClass do
38
48
  end
39
49
 
40
50
  it 'ignores feature specs - also with complex options' do
41
- inspect_source(cop, ["describe 'my new feature',",
42
- ' :test, :type => :feature, :foo => :bar do;',
43
- 'end'])
51
+ inspect_source(
52
+ cop,
53
+ [
54
+ "describe 'my new feature',",
55
+ ' :test, :type => :feature, :foo => :bar do;',
56
+ 'end'
57
+ ]
58
+ )
44
59
  expect(cop.offenses).to be_empty
45
60
  end
46
61
 
@@ -49,6 +64,11 @@ describe RuboCop::Cop::RSpec::DescribeClass do
49
64
  expect(cop.offenses).to be_empty
50
65
  end
51
66
 
67
+ it 'ignores view specs' do
68
+ inspect_source(cop, "describe 'widgets/index', type: :view do; end")
69
+ expect(cop.offenses).to be_empty
70
+ end
71
+
52
72
  it "doesn't blow up on single-line describes" do
53
73
  inspect_source(cop, 'describe Some::Class')
54
74
  expect(cop.offenses).to be_empty
@@ -4,11 +4,16 @@ describe RuboCop::Cop::RSpec::DescribedClass do
4
4
  subject(:cop) { described_class.new }
5
5
 
6
6
  it 'checks for the use of the described class' do
7
- inspect_source(cop, ['describe MyClass do',
8
- ' include MyClass',
9
- ' subject { MyClass.do_something }',
10
- ' before { MyClass.do_something }',
11
- 'end'])
7
+ inspect_source(
8
+ cop,
9
+ [
10
+ 'describe MyClass do',
11
+ ' include MyClass',
12
+ ' subject { MyClass.do_something }',
13
+ ' before { MyClass.do_something }',
14
+ 'end'
15
+ ]
16
+ )
12
17
  expect(cop.offenses.size).to eq(3)
13
18
  expect(cop.offenses.map(&:line).sort).to eq([2, 3, 4])
14
19
  expect(cop.messages)
@@ -17,41 +22,61 @@ describe RuboCop::Cop::RSpec::DescribedClass do
17
22
  end
18
23
 
19
24
  it 'ignores described class as string' do
20
- inspect_source(cop, ['describe MyClass do',
21
- ' subject { "MyClass" }',
22
- 'end'])
25
+ inspect_source(
26
+ cop,
27
+ [
28
+ 'describe MyClass do',
29
+ ' subject { "MyClass" }',
30
+ 'end'
31
+ ]
32
+ )
23
33
  expect(cop.offenses).to be_empty
24
34
  end
25
35
 
26
36
  it 'ignores describe that do not referece to a class' do
27
- inspect_source(cop, ['describe "MyClass" do',
28
- ' subject { "MyClass" }',
29
- 'end'])
37
+ inspect_source(
38
+ cop,
39
+ [
40
+ 'describe "MyClass" do',
41
+ ' subject { "MyClass" }',
42
+ 'end'
43
+ ]
44
+ )
30
45
  expect(cop.offenses).to be_empty
31
46
  end
32
47
 
33
48
  it 'ignores class if the scope is changing' do
34
- inspect_source(cop, ['describe MyClass do',
35
- ' def method',
36
- ' include MyClass',
37
- ' end',
38
- ' class OtherClass',
39
- ' include MyClass',
40
- ' end',
41
- ' module MyModle',
42
- ' include MyClass',
43
- ' end',
44
- 'end'])
49
+ inspect_source(
50
+ cop,
51
+ [
52
+ 'describe MyClass do',
53
+ ' def method',
54
+ ' include MyClass',
55
+ ' end',
56
+ ' class OtherClass',
57
+ ' include MyClass',
58
+ ' end',
59
+ ' module MyModle',
60
+ ' include MyClass',
61
+ ' end',
62
+ 'end'
63
+ ]
64
+ )
45
65
  expect(cop.offenses).to be_empty
46
66
  end
47
67
 
48
68
  it 'only takes class from top level describes' do
49
- inspect_source(cop, ['describe MyClass do',
50
- ' describe MyClass::Foo do',
51
- ' subject { MyClass::Foo }',
52
- ' let(:foo) { MyClass }',
53
- ' end',
54
- 'end'])
69
+ inspect_source(
70
+ cop,
71
+ [
72
+ 'describe MyClass do',
73
+ ' describe MyClass::Foo do',
74
+ ' subject { MyClass::Foo }',
75
+ ' let(:foo) { MyClass }',
76
+ ' end',
77
+ 'end'
78
+ ]
79
+ )
55
80
  expect(cop.offenses.size).to eq(1)
56
81
  expect(cop.offenses.map(&:line).sort).to eq([4])
57
82
  expect(cop.messages)
@@ -60,24 +85,39 @@ describe RuboCop::Cop::RSpec::DescribedClass do
60
85
  end
61
86
 
62
87
  it 'ignores subclasses' do
63
- inspect_source(cop, ['describe MyClass do',
64
- ' subject { MyClass::SubClass }',
65
- 'end'])
88
+ inspect_source(
89
+ cop,
90
+ [
91
+ 'describe MyClass do',
92
+ ' subject { MyClass::SubClass }',
93
+ 'end'
94
+ ]
95
+ )
66
96
  expect(cop.offenses).to be_empty
67
97
  end
68
98
 
69
99
  it 'ignores if namespace is not matching' do
70
- inspect_source(cop, ['describe MyNamespace::MyClass do',
71
- ' subject { ::MyClass }',
72
- ' let(:foo) { MyClass }',
73
- 'end'])
100
+ inspect_source(
101
+ cop,
102
+ [
103
+ 'describe MyNamespace::MyClass do',
104
+ ' subject { ::MyClass }',
105
+ ' let(:foo) { MyClass }',
106
+ 'end'
107
+ ]
108
+ )
74
109
  expect(cop.offenses).to be_empty
75
110
  end
76
111
 
77
112
  it 'checks for the use of described class with namespace' do
78
- inspect_source(cop, ['describe MyNamespace::MyClass do',
79
- ' subject { MyNamespace::MyClass }',
80
- 'end'])
113
+ inspect_source(
114
+ cop,
115
+ [
116
+ 'describe MyNamespace::MyClass do',
117
+ ' subject { MyNamespace::MyClass }',
118
+ 'end'
119
+ ]
120
+ )
81
121
  expect(cop.offenses.size).to eq(1)
82
122
  expect(cop.offenses.map(&:line).sort).to eq([2])
83
123
  expect(cop.messages)
@@ -87,11 +127,16 @@ describe RuboCop::Cop::RSpec::DescribedClass do
87
127
 
88
128
  it 'checks for the use of described class with module' do
89
129
  skip
90
- inspect_source(cop, ['module MyNamespace',
91
- ' describe MyClass do',
92
- ' subject { MyNamespace::MyClass }',
93
- ' end',
94
- 'end'])
130
+ inspect_source(
131
+ lcop,
132
+ [
133
+ 'module MyNamespace',
134
+ ' describe MyClass do',
135
+ ' subject { MyNamespace::MyClass }',
136
+ ' end',
137
+ 'end'
138
+ ]
139
+ )
95
140
  expect(cop.offenses.size).to eq(1)
96
141
  expect(cop.offenses.map(&:line).sort).to eq([2])
97
142
  expect(cop.messages)
@@ -100,15 +145,24 @@ describe RuboCop::Cop::RSpec::DescribedClass do
100
145
  end
101
146
 
102
147
  it 'autocorrects an offenses' do
103
- new_source = autocorrect_source(cop, ['describe MyClass do',
104
- ' include MyClass',
105
- ' subject { MyClass.do_something }',
106
- ' before { MyClass.do_something }',
107
- 'end'])
108
- expect(new_source).to eq(['describe MyClass do',
109
- ' include described_class',
110
- ' subject { described_class.do_something }',
111
- ' before { described_class.do_something }',
112
- 'end'].join("\n"))
148
+ new_source = autocorrect_source(
149
+ cop,
150
+ [
151
+ 'describe MyClass do',
152
+ ' include MyClass',
153
+ ' subject { MyClass.do_something }',
154
+ ' before { MyClass.do_something }',
155
+ 'end'
156
+ ]
157
+ )
158
+ expect(new_source).to eq(
159
+ [
160
+ 'describe MyClass do',
161
+ ' include described_class',
162
+ ' subject { described_class.do_something }',
163
+ ' before { described_class.do_something }',
164
+ 'end'
165
+ ].join("\n")
166
+ )
113
167
  end
114
168
  end
@@ -0,0 +1,83 @@
1
+ # encoding: utf-8
2
+
3
+ describe RuboCop::Cop::RSpec::ExampleLength, :config do
4
+ subject(:cop) { described_class.new(config) }
5
+ let(:cop_config) { { 'Max' => 3 } }
6
+
7
+ it 'allows an empty example' do
8
+ inspect_source(
9
+ cop,
10
+ [
11
+ 'it do',
12
+ 'end'
13
+ ]
14
+ )
15
+ expect(cop.offenses).to be_empty
16
+ end
17
+
18
+ it 'allows a short example' do
19
+ inspect_source(
20
+ cop,
21
+ [
22
+ 'it do',
23
+ ' line 1',
24
+ ' line 2',
25
+ ' line 3',
26
+ 'end'
27
+ ]
28
+ )
29
+ expect(cop.offenses).to be_empty
30
+ end
31
+
32
+ it 'doesn\t allow a long example' do
33
+ inspect_source(
34
+ cop,
35
+ [
36
+ 'it do',
37
+ ' line 1',
38
+ ' line 2',
39
+ ' line 3',
40
+ ' line 4',
41
+ 'end'
42
+ ]
43
+ )
44
+ expect(cop.offenses.size).to eq(1)
45
+ expect(cop.offenses.map(&:line).sort).to eq([1])
46
+ expect(cop.messages).to eq(['Example has too many lines. [4/3]'])
47
+ end
48
+
49
+ it 'ignores comments' do
50
+ inspect_source(
51
+ cop,
52
+ [
53
+ 'it do',
54
+ ' line 1',
55
+ ' line 2',
56
+ ' # comment',
57
+ ' line 3',
58
+ 'end'
59
+ ]
60
+ )
61
+ expect(cop.offenses).to be_empty
62
+ end
63
+
64
+ context 'with CountComments enabled' do
65
+ before { cop_config['CountComments'] = true }
66
+
67
+ it 'counts comments' do
68
+ inspect_source(
69
+ cop, [
70
+ 'it do',
71
+ ' line 1',
72
+ ' line 2',
73
+ ' # comment',
74
+ ' line 3',
75
+ 'end'
76
+ ]
77
+ )
78
+ expect(cop.offenses.size).to eq(1)
79
+ expect(cop.offenses.map(&:line).sort).to eq([1])
80
+ expect(cop.messages).to eq(['Example has too many lines. [4/3]'])
81
+ end
82
+ end
83
+ end
@@ -37,9 +37,14 @@ describe RuboCop::Cop::RSpec::ExampleWording, :config do
37
37
  end
38
38
 
39
39
  it 'skips descriptions without `should` at the beginning' do
40
- inspect_source(cop, ["it 'finds no should ' \\",
41
- " 'here' do",
42
- 'end'])
40
+ inspect_source(
41
+ cop,
42
+ [
43
+ "it 'finds no should ' \\",
44
+ " 'here' do",
45
+ 'end'
46
+ ]
47
+ )
43
48
  expect(cop.offenses).to be_empty
44
49
  end
45
50
 
@@ -60,8 +65,10 @@ describe RuboCop::Cop::RSpec::ExampleWording, :config do
60
65
  end
61
66
 
62
67
  it "autocorrects shouldn't" do
63
- new_source =
64
- autocorrect_source(cop, 'it "shouldn\'t return something" do; end')
68
+ new_source = autocorrect_source(
69
+ cop,
70
+ 'it "shouldn\'t return something" do; end'
71
+ )
65
72
  expect(new_source).to eq('it "does not return something" do; end')
66
73
  end
67
74
  end
@@ -5,9 +5,11 @@ describe RuboCop::Cop::RSpec::FilePath, :config do
5
5
  let(:cop_config) { { 'CustomTransform' => { 'FooFoo' => 'foofoo' } } }
6
6
 
7
7
  it 'checks the path' do
8
- inspect_source(cop,
9
- "describe MyClass, 'foo' do; end",
10
- 'wrong_path_foo_spec.rb')
8
+ inspect_source(
9
+ cop,
10
+ "describe MyClass, 'foo' do; end",
11
+ 'wrong_path_foo_spec.rb'
12
+ )
11
13
  expect(cop.offenses.size).to eq(1)
12
14
  expect(cop.offenses.map(&:line).sort).to eq([1])
13
15
  expect(cop.messages)
@@ -15,9 +17,11 @@ describe RuboCop::Cop::RSpec::FilePath, :config do
15
17
  end
16
18
 
17
19
  it 'checks the path' do
18
- inspect_source(cop,
19
- "describe MyClass, '#foo' do; end",
20
- 'wrong_class_foo_spec.rb')
20
+ inspect_source(
21
+ cop,
22
+ "describe MyClass, '#foo' do; end",
23
+ 'wrong_class_foo_spec.rb'
24
+ )
21
25
  expect(cop.offenses.size).to eq(1)
22
26
  expect(cop.offenses.map(&:line).sort).to eq([1])
23
27
  expect(cop.messages)
@@ -25,9 +29,11 @@ describe RuboCop::Cop::RSpec::FilePath, :config do
25
29
  end
26
30
 
27
31
  it 'checks class spec paths' do
28
- inspect_source(cop,
29
- 'describe MyClass do; end',
30
- 'wrong_class_spec.rb')
32
+ inspect_source(
33
+ cop,
34
+ 'describe MyClass do; end',
35
+ 'wrong_class_spec.rb'
36
+ )
31
37
  expect(cop.offenses.size).to eq(1)
32
38
  expect(cop.offenses.map(&:line).sort).to eq([1])
33
39
  expect(cop.messages)
@@ -35,24 +41,32 @@ describe RuboCop::Cop::RSpec::FilePath, :config do
35
41
  end
36
42
 
37
43
  it 'skips specs that do not describe a class / method' do
38
- inspect_source(cop,
39
- "describe 'Test something' do; end",
40
- 'some/class/spec.rb')
44
+ inspect_source(
45
+ cop,
46
+ "describe 'Test something' do; end",
47
+ 'some/class/spec.rb'
48
+ )
41
49
  expect(cop.offenses).to be_empty
42
50
  end
43
51
 
44
52
  it 'skips specs that do have multiple top level describes' do
45
- inspect_source(cop,
46
- ["describe MyClass, 'do_this' do; end",
47
- "describe MyClass, 'do_that' do; end"],
48
- 'some/class/spec.rb')
53
+ inspect_source(
54
+ cop,
55
+ [
56
+ "describe MyClass, 'do_this' do; end",
57
+ "describe MyClass, 'do_that' do; end"
58
+ ],
59
+ 'some/class/spec.rb'
60
+ )
49
61
  expect(cop.offenses).to be_empty
50
62
  end
51
63
 
52
64
  it 'ignores second argument if is not a string' do
53
- inspect_source(cop,
54
- 'describe MyClass, :foo do; end',
55
- 'wrong_class_spec.rb')
65
+ inspect_source(
66
+ cop,
67
+ 'describe MyClass, :foo do; end',
68
+ 'wrong_class_spec.rb'
69
+ )
56
70
  expect(cop.offenses.size).to eq(1)
57
71
  expect(cop.offenses.map(&:line).sort).to eq([1])
58
72
  expect(cop.messages)
@@ -60,100 +74,146 @@ describe RuboCop::Cop::RSpec::FilePath, :config do
60
74
  end
61
75
 
62
76
  it 'checks class specs' do
63
- inspect_source(cop,
64
- 'describe Some::Class do; end',
65
- 'some/class_spec.rb')
77
+ inspect_source(
78
+ cop,
79
+ 'describe Some::Class do; end',
80
+ 'some/class_spec.rb'
81
+ )
66
82
  expect(cop.offenses).to be_empty
67
83
  end
68
84
 
69
85
  it 'handles CamelCaps class names' do
70
- inspect_source(cop,
71
- 'describe MyClass do; end',
72
- 'my_class_spec.rb')
86
+ inspect_source(
87
+ cop,
88
+ 'describe MyClass do; end',
89
+ 'my_class_spec.rb'
90
+ )
73
91
  expect(cop.offenses).to be_empty
74
92
  end
75
93
 
76
94
  it 'handles ACRONYMClassNames' do
77
- inspect_source(cop,
78
- 'describe ABCOne::Two do; end',
79
- 'abc_one/two_spec.rb')
95
+ inspect_source(
96
+ cop,
97
+ 'describe ABCOne::Two do; end',
98
+ 'abc_one/two_spec.rb'
99
+ )
80
100
  expect(cop.offenses).to be_empty
81
101
  end
82
102
 
83
103
  it 'handles ALLCAPS class names' do
84
- inspect_source(cop,
85
- 'describe ALLCAPS do; end',
86
- 'allcaps_spec.rb')
104
+ inspect_source(
105
+ cop,
106
+ 'describe ALLCAPS do; end',
107
+ 'allcaps_spec.rb'
108
+ )
109
+ expect(cop.offenses).to be_empty
110
+ end
111
+
112
+ it 'handles alphanumeric class names' do
113
+ inspect_source(
114
+ cop,
115
+ 'describe IPV6 do; end',
116
+ 'ipv6_spec.rb'
117
+ )
87
118
  expect(cop.offenses).to be_empty
88
119
  end
89
120
 
90
121
  it 'checks instance methods' do
91
- inspect_source(cop,
92
- "describe Some::Class, '#inst' do; end",
93
- 'some/class/inst_spec.rb')
122
+ inspect_source(
123
+ cop,
124
+ "describe Some::Class, '#inst' do; end",
125
+ 'some/class/inst_spec.rb'
126
+ )
94
127
  expect(cop.offenses).to be_empty
95
128
  end
96
129
 
97
130
  it 'checks class methods' do
98
- inspect_source(cop,
99
- "describe Some::Class, '.inst' do; end",
100
- 'some/class/inst_spec.rb')
131
+ inspect_source(
132
+ cop,
133
+ "describe Some::Class, '.inst' do; end",
134
+ 'some/class/inst_spec.rb'
135
+ )
101
136
  expect(cop.offenses).to be_empty
102
137
  end
103
138
 
104
139
  it 'allows flat hierarchies for instance methods' do
105
- inspect_source(cop,
106
- "describe Some::Class, '#inst' do; end",
107
- 'some/class_inst_spec.rb')
140
+ inspect_source(
141
+ cop,
142
+ "describe Some::Class, '#inst' do; end",
143
+ 'some/class_inst_spec.rb'
144
+ )
108
145
  expect(cop.offenses).to be_empty
109
146
  end
110
147
 
111
148
  it 'allows flat hierarchies for class methods' do
112
- inspect_source(cop,
113
- "describe Some::Class, '.inst' do; end",
114
- 'some/class_inst_spec.rb')
149
+ inspect_source(
150
+ cop,
151
+ "describe Some::Class, '.inst' do; end",
152
+ 'some/class_inst_spec.rb'
153
+ )
115
154
  expect(cop.offenses).to be_empty
116
155
  end
117
156
 
118
157
  it 'allows subdirs for instance methods' do
119
- inspect_source(cop,
120
- "describe Some::Class, '#inst' do; end",
121
- 'some/class/instance_methods/inst_spec.rb')
158
+ inspect_source(
159
+ cop,
160
+ "describe Some::Class, '#inst' do; end",
161
+ 'some/class/instance_methods/inst_spec.rb'
162
+ )
122
163
  expect(cop.offenses).to be_empty
123
164
  end
124
165
 
125
166
  it 'allows subdirs for class methods' do
126
- inspect_source(cop,
127
- "describe Some::Class, '.inst' do; end",
128
- 'some/class/class_methods/inst_spec.rb')
167
+ inspect_source(
168
+ cop,
169
+ "describe Some::Class, '.inst' do; end",
170
+ 'some/class/class_methods/inst_spec.rb'
171
+ )
129
172
  expect(cop.offenses).to be_empty
130
173
  end
131
174
 
132
175
  it 'ignores non-alphanumeric characters' do
133
- inspect_source(cop,
134
- "describe Some::Class, '#pred?' do; end",
135
- 'some/class/pred_spec.rb')
176
+ inspect_source(
177
+ cop,
178
+ "describe Some::Class, '#pred?' do; end",
179
+ 'some/class/pred_spec.rb'
180
+ )
136
181
  expect(cop.offenses).to be_empty
137
182
  end
138
183
 
139
184
  it 'allows flexibility with predicates' do
140
- inspect_source(cop,
141
- "describe Some::Class, '#thing?' do; end",
142
- 'some/class/thing_predicate_spec.rb')
185
+ inspect_source(
186
+ cop,
187
+ "describe Some::Class, '#thing?' do; end",
188
+ 'some/class/thing_predicate_spec.rb'
189
+ )
143
190
  expect(cop.offenses).to be_empty
144
191
  end
145
192
 
146
193
  it 'allows flexibility with operators' do
147
- inspect_source(cop,
148
- "describe MyClass, '#<=>' do; end",
149
- 'my_class/spaceship_operator_spec.rb')
194
+ inspect_source(
195
+ cop,
196
+ "describe MyClass, '#<=>' do; end",
197
+ 'my_class/spaceship_operator_spec.rb'
198
+ )
150
199
  expect(cop.offenses).to be_empty
151
200
  end
152
201
 
153
202
  it 'respects custom module name transformation' do
154
- inspect_source(cop,
155
- "describe FooFoo::Some::Class, '#bar' do; end",
156
- 'foofoo/some/class/bar_spec.rb')
203
+ inspect_source(
204
+ cop,
205
+ "describe FooFoo::Some::Class, '#bar' do; end",
206
+ 'foofoo/some/class/bar_spec.rb'
207
+ )
208
+ expect(cop.offenses).to be_empty
209
+ end
210
+
211
+ it 'ignores routing specs' do
212
+ inspect_source(
213
+ cop,
214
+ 'describe MyController, type: :routing do; end',
215
+ 'foofoo/some/class/bar_spec.rb'
216
+ )
157
217
  expect(cop.offenses).to be_empty
158
218
  end
159
219
  end