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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -3
- data/README.md +1 -1
- data/config/default.yml +14 -2
- data/lib/rubocop-rspec.rb +2 -0
- data/lib/rubocop/cop/rspec/any_instance.rb +8 -5
- data/lib/rubocop/cop/rspec/describe_class.rb +2 -1
- data/lib/rubocop/cop/rspec/example_length.rb +60 -0
- data/lib/rubocop/cop/rspec/file_path.rb +13 -3
- data/lib/rubocop/cop/rspec/focus.rb +67 -0
- data/lib/rubocop/cop/rspec/not_to_not.rb +21 -20
- data/lib/rubocop/cop/rspec/verified_doubles.rb +12 -2
- data/lib/rubocop/rspec/version.rb +1 -1
- data/rubocop-rspec.gemspec +1 -1
- data/spec/rubocop/cop/rspec/any_instance_spec.rb +24 -9
- data/spec/rubocop/cop/rspec/describe_class_spec.rb +28 -8
- data/spec/rubocop/cop/rspec/described_class_spec.rb +107 -53
- data/spec/rubocop/cop/rspec/example_length_spec.rb +83 -0
- data/spec/rubocop/cop/rspec/example_wording_spec.rb +12 -5
- data/spec/rubocop/cop/rspec/file_path_spec.rb +121 -61
- data/spec/rubocop/cop/rspec/focus_spec.rb +70 -0
- data/spec/rubocop/cop/rspec/instance_variable_spec.rb +18 -9
- data/spec/rubocop/cop/rspec/multiple_describes_spec.rb +22 -7
- data/spec/rubocop/cop/rspec/not_to_not_spec.rb +15 -5
- data/spec/rubocop/cop/rspec/verified_doubles_spec.rb +41 -3
- metadata +12 -6
@@ -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(
|
16
|
-
|
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(
|
25
|
-
|
26
|
-
|
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(
|
42
|
-
|
43
|
-
|
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(
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
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(
|
21
|
-
|
22
|
-
|
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(
|
28
|
-
|
29
|
-
|
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(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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(
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
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(
|
64
|
-
|
65
|
-
|
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(
|
71
|
-
|
72
|
-
|
73
|
-
|
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(
|
79
|
-
|
80
|
-
|
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(
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
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(
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
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(
|
41
|
-
|
42
|
-
|
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
|
-
|
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(
|
9
|
-
|
10
|
-
|
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(
|
19
|
-
|
20
|
-
|
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(
|
29
|
-
|
30
|
-
|
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(
|
39
|
-
|
40
|
-
|
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(
|
46
|
-
|
47
|
-
|
48
|
-
|
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(
|
54
|
-
|
55
|
-
|
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(
|
64
|
-
|
65
|
-
|
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(
|
71
|
-
|
72
|
-
|
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(
|
78
|
-
|
79
|
-
|
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(
|
85
|
-
|
86
|
-
|
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(
|
92
|
-
|
93
|
-
|
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(
|
99
|
-
|
100
|
-
|
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(
|
106
|
-
|
107
|
-
|
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(
|
113
|
-
|
114
|
-
|
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(
|
120
|
-
|
121
|
-
|
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(
|
127
|
-
|
128
|
-
|
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(
|
134
|
-
|
135
|
-
|
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(
|
141
|
-
|
142
|
-
|
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(
|
148
|
-
|
149
|
-
|
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(
|
155
|
-
|
156
|
-
|
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
|