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.
- 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
|