rubocop-rspec 1.4.1 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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