rubocop-rspec 1.6.0 → 1.7.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 +22 -0
- data/README.md +23 -0
- data/Rakefile +19 -1
- data/config/default.yml +78 -15
- data/lib/rubocop-rspec.rb +19 -1
- data/lib/rubocop/cop/rspec/any_instance.rb +5 -1
- data/lib/rubocop/cop/rspec/be_eql.rb +58 -0
- data/lib/rubocop/cop/rspec/describe_class.rb +2 -3
- data/lib/rubocop/cop/rspec/describe_method.rb +4 -3
- data/lib/rubocop/cop/rspec/described_class.rb +4 -35
- data/lib/rubocop/cop/rspec/empty_example_group.rb +100 -0
- data/lib/rubocop/cop/rspec/example_length.rb +5 -2
- data/lib/rubocop/cop/rspec/example_wording.rb +5 -2
- data/lib/rubocop/cop/rspec/expect_actual.rb +79 -0
- data/lib/rubocop/cop/rspec/file_path.rb +3 -1
- data/lib/rubocop/cop/rspec/focus.rb +12 -28
- data/lib/rubocop/cop/rspec/hook_argument.rb +122 -0
- data/lib/rubocop/cop/rspec/instance_variable.rb +53 -12
- data/lib/rubocop/cop/rspec/leading_subject.rb +58 -0
- data/lib/rubocop/cop/rspec/let_setup.rb +58 -0
- data/lib/rubocop/cop/rspec/message_chain.rb +33 -0
- data/lib/rubocop/cop/rspec/message_expectation.rb +58 -0
- data/lib/rubocop/cop/rspec/multiple_describes.rb +10 -7
- data/lib/rubocop/cop/rspec/multiple_expectations.rb +89 -0
- data/lib/rubocop/cop/rspec/named_subject.rb +10 -1
- data/lib/rubocop/cop/rspec/nested_groups.rb +125 -0
- data/lib/rubocop/cop/rspec/not_to_not.rb +3 -3
- data/lib/rubocop/cop/rspec/subject_stub.rb +136 -0
- data/lib/rubocop/cop/rspec/verified_doubles.rb +4 -1
- data/lib/rubocop/rspec.rb +10 -0
- data/lib/rubocop/rspec/config_formatter.rb +33 -0
- data/lib/rubocop/rspec/description_extractor.rb +35 -0
- data/lib/rubocop/rspec/inject.rb +2 -6
- data/lib/rubocop/rspec/language.rb +73 -0
- data/lib/rubocop/rspec/language/node_pattern.rb +16 -0
- data/lib/rubocop/rspec/spec_only.rb +61 -0
- data/lib/rubocop/rspec/top_level_describe.rb +6 -0
- data/lib/rubocop/rspec/version.rb +1 -1
- data/rubocop-rspec.gemspec +1 -0
- data/spec/project/changelog_spec.rb +81 -0
- data/spec/project/default_config_spec.rb +52 -0
- data/spec/project/project_requires_spec.rb +8 -0
- data/spec/rubocop/cop/rspec/be_eql_spec.rb +59 -0
- data/spec/rubocop/cop/rspec/described_class_spec.rb +2 -2
- data/spec/rubocop/cop/rspec/empty_example_group_spec.rb +79 -0
- data/spec/rubocop/cop/rspec/example_length_spec.rb +50 -30
- data/spec/rubocop/cop/rspec/example_wording_spec.rb +21 -3
- data/spec/rubocop/cop/rspec/expect_actual_spec.rb +136 -0
- data/spec/rubocop/cop/rspec/file_path_spec.rb +48 -71
- data/spec/rubocop/cop/rspec/focus_spec.rb +1 -1
- data/spec/rubocop/cop/rspec/hook_argument_spec.rb +189 -0
- data/spec/rubocop/cop/rspec/instance_variable_spec.rb +37 -0
- data/spec/rubocop/cop/rspec/leading_subject_spec.rb +54 -0
- data/spec/rubocop/cop/rspec/let_setup_spec.rb +66 -0
- data/spec/rubocop/cop/rspec/message_chain_spec.rb +21 -0
- data/spec/rubocop/cop/rspec/message_expectation_spec.rb +63 -0
- data/spec/rubocop/cop/rspec/multiple_expectations_spec.rb +84 -0
- data/spec/rubocop/cop/rspec/nested_groups_spec.rb +55 -0
- data/spec/rubocop/cop/rspec/not_to_not_spec.rb +12 -2
- data/spec/rubocop/cop/rspec/subject_stub_spec.rb +183 -0
- data/spec/rubocop/rspec/config_formatter_spec.rb +48 -0
- data/spec/rubocop/rspec/description_extractor_spec.rb +35 -0
- data/spec/rubocop/rspec/language/selector_set_spec.rb +29 -0
- data/spec/rubocop/rspec/spec_only_spec.rb +97 -0
- data/spec/shared/rspec_only_cop_behavior.rb +68 -0
- data/spec/spec_helper.rb +13 -1
- metadata +72 -5
- data/spec/project_spec.rb +0 -115
@@ -45,19 +45,37 @@ describe RuboCop::Cop::RSpec::ExampleWording, :config do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'corrects `it "should only have"` to it "only has"' do
|
48
|
-
corrected =
|
48
|
+
corrected =
|
49
|
+
autocorrect_source(
|
50
|
+
cop,
|
51
|
+
'it "should only have trait" do end',
|
52
|
+
'spec/foo_spec.rb'
|
53
|
+
)
|
54
|
+
|
49
55
|
expect(corrected).to eql('it "only has trait" do end')
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
53
59
|
context 'when configuration is empty' do
|
54
60
|
it 'only does not correct "have"' do
|
55
|
-
corrected =
|
61
|
+
corrected =
|
62
|
+
autocorrect_source(
|
63
|
+
cop,
|
64
|
+
'it "should have trait" do end',
|
65
|
+
'spec/foo_spec.rb'
|
66
|
+
)
|
67
|
+
|
56
68
|
expect(corrected).to eql('it "haves trait" do end')
|
57
69
|
end
|
58
70
|
|
59
71
|
it 'only does not make an exception for the word "only"' do
|
60
|
-
corrected =
|
72
|
+
corrected =
|
73
|
+
autocorrect_source(
|
74
|
+
cop,
|
75
|
+
'it "should only fail" do end',
|
76
|
+
'spec/foo_spec.rb'
|
77
|
+
)
|
78
|
+
|
61
79
|
expect(corrected).to eql('it "onlies fail" do end')
|
62
80
|
end
|
63
81
|
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe RuboCop::Cop::RSpec::ExpectActual do
|
4
|
+
subject(:cop) { described_class.new }
|
5
|
+
|
6
|
+
it 'flags numeric literal values within expect(...)' do
|
7
|
+
expect_violation(<<-RUBY)
|
8
|
+
describe Foo do
|
9
|
+
it 'uses expect incorrectly' do
|
10
|
+
expect(123).to eq(bar)
|
11
|
+
^^^ Provide the actual you are testing to `expect(...)`
|
12
|
+
expect(12.3).to eq(bar)
|
13
|
+
^^^^ Provide the actual you are testing to `expect(...)`
|
14
|
+
expect(1i).to eq(bar)
|
15
|
+
^^ Provide the actual you are testing to `expect(...)`
|
16
|
+
expect(1r).to eq(bar)
|
17
|
+
^^ Provide the actual you are testing to `expect(...)`
|
18
|
+
end
|
19
|
+
end
|
20
|
+
RUBY
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'flags boolean literal values within expect(...)' do
|
24
|
+
expect_violation(<<-RUBY)
|
25
|
+
describe Foo do
|
26
|
+
it 'uses expect incorrectly' do
|
27
|
+
expect(true).to eq(bar)
|
28
|
+
^^^^ Provide the actual you are testing to `expect(...)`
|
29
|
+
expect(false).to eq(bar)
|
30
|
+
^^^^^ Provide the actual you are testing to `expect(...)`
|
31
|
+
end
|
32
|
+
end
|
33
|
+
RUBY
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'flags string and symbol literal values within expect(...)' do
|
37
|
+
expect_violation(<<-RUBY)
|
38
|
+
describe Foo do
|
39
|
+
it 'uses expect incorrectly' do
|
40
|
+
expect("foo").to eq(bar)
|
41
|
+
^^^^^ Provide the actual you are testing to `expect(...)`
|
42
|
+
expect(:foo).to eq(bar)
|
43
|
+
^^^^ Provide the actual you are testing to `expect(...)`
|
44
|
+
end
|
45
|
+
end
|
46
|
+
RUBY
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'flags literal nil value within expect(...)' do
|
50
|
+
expect_violation(<<-RUBY)
|
51
|
+
describe Foo do
|
52
|
+
it 'uses expect incorrectly' do
|
53
|
+
expect(nil).to eq(bar)
|
54
|
+
^^^ Provide the actual you are testing to `expect(...)`
|
55
|
+
end
|
56
|
+
end
|
57
|
+
RUBY
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'does not flag dynamic values within expect(...)' do
|
61
|
+
expect_no_violations(<<-'RUBY')
|
62
|
+
describe Foo do
|
63
|
+
it 'uses expect correctly' do
|
64
|
+
expect(foo).to eq(bar)
|
65
|
+
expect("foo#{baz}").to eq(bar)
|
66
|
+
expect(:"foo#{baz}").to eq(bar)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
RUBY
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'flags arrays containing only literal values within expect(...)' do
|
73
|
+
expect_violation(<<-RUBY)
|
74
|
+
describe Foo do
|
75
|
+
it 'uses expect incorrectly' do
|
76
|
+
expect([123]).to eq(bar)
|
77
|
+
^^^^^ Provide the actual you are testing to `expect(...)`
|
78
|
+
expect([[123]]).to eq(bar)
|
79
|
+
^^^^^^^ Provide the actual you are testing to `expect(...)`
|
80
|
+
end
|
81
|
+
end
|
82
|
+
RUBY
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'flags hashes containing only literal values within expect(...)' do
|
86
|
+
expect_violation(<<-RUBY)
|
87
|
+
describe Foo do
|
88
|
+
it 'uses expect incorrectly' do
|
89
|
+
expect(foo: 1, bar: 2).to eq(bar)
|
90
|
+
^^^^^^^^^^^^^^ Provide the actual you are testing to `expect(...)`
|
91
|
+
expect(foo: 1, bar: [{}]).to eq(bar)
|
92
|
+
^^^^^^^^^^^^^^^^^ Provide the actual you are testing to `expect(...)`
|
93
|
+
end
|
94
|
+
end
|
95
|
+
RUBY
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'flags ranges containing only literal values within expect(...)' do
|
99
|
+
expect_violation(<<-RUBY)
|
100
|
+
describe Foo do
|
101
|
+
it 'uses expect incorrectly' do
|
102
|
+
expect(1..2).to eq(bar)
|
103
|
+
^^^^ Provide the actual you are testing to `expect(...)`
|
104
|
+
expect(1...2).to eq(bar)
|
105
|
+
^^^^^ Provide the actual you are testing to `expect(...)`
|
106
|
+
end
|
107
|
+
end
|
108
|
+
RUBY
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'flags regexps containing only literal values within expect(...)' do
|
112
|
+
expect_violation(<<-RUBY)
|
113
|
+
describe Foo do
|
114
|
+
it 'uses expect incorrectly' do
|
115
|
+
expect(/foo|bar/).to eq(bar)
|
116
|
+
^^^^^^^^^ Provide the actual you are testing to `expect(...)`
|
117
|
+
end
|
118
|
+
end
|
119
|
+
RUBY
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'does not flag complex values with dynamic parts within expect(...)' do
|
123
|
+
expect_no_violations(<<-'RUBY')
|
124
|
+
describe Foo do
|
125
|
+
it 'uses expect incorrectly' do
|
126
|
+
expect([foo]).to eq(bar)
|
127
|
+
expect([[foo]]).to eq(bar)
|
128
|
+
expect(foo: 1, bar: foo).to eq(bar)
|
129
|
+
expect(1..foo).to eq(bar)
|
130
|
+
expect(1...foo).to eq(bar)
|
131
|
+
expect(/foo|#{bar}/).to eq(bar)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
RUBY
|
135
|
+
end
|
136
|
+
end
|
@@ -1,71 +1,60 @@
|
|
1
1
|
describe RuboCop::Cop::RSpec::FilePath, :config do
|
2
2
|
subject(:cop) { described_class.new(config) }
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
shared_examples 'invalid spec path' do |source, expected:, actual:|
|
5
|
+
context "when `#{source}` is defined in #{actual}" do
|
6
|
+
before do
|
7
|
+
inspect_source(cop, source, actual)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'flags an offense' do
|
11
|
+
expect(cop.offenses.size).to eq(1)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'registers the offense on line 1' do
|
15
|
+
expect(cop.offenses.map(&:line)).to eq([1])
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'adds a message saying what the path should end with' do
|
19
|
+
expect(cop.messages).to eql(["Spec path should end with `#{expected}`"])
|
20
|
+
end
|
21
|
+
end
|
14
22
|
end
|
15
23
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
'wrong_class_foo_spec.rb'
|
21
|
-
)
|
22
|
-
expect(cop.offenses.size).to eq(1)
|
23
|
-
expect(cop.offenses.map(&:line).sort).to eq([1])
|
24
|
-
expect(cop.messages)
|
25
|
-
.to eq(['Spec path should end with `my_class*foo*_spec.rb`'])
|
26
|
-
end
|
24
|
+
include_examples 'invalid spec path',
|
25
|
+
"describe MyClass, 'foo' do; end",
|
26
|
+
expected: 'my_class*foo*_spec.rb',
|
27
|
+
actual: 'wrong_path_foo_spec.rb'
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
'my_class/foo_spec.rb.rb'
|
33
|
-
)
|
34
|
-
expect(cop.offenses.size).to eq(1)
|
35
|
-
end
|
29
|
+
include_examples 'invalid spec path',
|
30
|
+
"describe MyClass, '#foo' do; end",
|
31
|
+
expected: 'my_class*foo*_spec.rb',
|
32
|
+
actual: 'wrong_class_foo_spec.rb'
|
36
33
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
'my_class/foo_specorb'
|
42
|
-
)
|
43
|
-
expect(cop.offenses.size).to eq(1)
|
44
|
-
end
|
34
|
+
include_examples 'invalid spec path',
|
35
|
+
"describe MyClass, '#foo' do; end",
|
36
|
+
expected: 'my_class*foo*_spec.rb',
|
37
|
+
actual: 'my_class/foo_spec.rb.rb'
|
45
38
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
'wrong_class_foo_spec.rb'
|
51
|
-
)
|
52
|
-
expect(cop.offenses.size).to eq(1)
|
53
|
-
expect(cop.offenses.map(&:line).sort).to eq([1])
|
54
|
-
expect(cop.messages)
|
55
|
-
.to eq(['Spec path should end with `my_class*foo*_spec.rb`'])
|
56
|
-
end
|
39
|
+
include_examples 'invalid spec path',
|
40
|
+
"describe MyClass, '#foo' do; end",
|
41
|
+
expected: 'my_class*foo*_spec.rb',
|
42
|
+
actual: 'my_class/foo_specorb'
|
57
43
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
44
|
+
include_examples 'invalid spec path',
|
45
|
+
"describe MyClass, '#foo', blah: :blah do; end",
|
46
|
+
expected: 'my_class*foo*_spec.rb',
|
47
|
+
actual: 'wrong_class_foo_spec.rb'
|
48
|
+
|
49
|
+
include_examples 'invalid spec path',
|
50
|
+
'describe MyClass do; end',
|
51
|
+
expected: 'my_class*_spec.rb',
|
52
|
+
actual: 'wrong_class_spec.rb'
|
53
|
+
|
54
|
+
include_examples 'invalid spec path',
|
55
|
+
'describe MyClass, :foo do; end',
|
56
|
+
expected: 'my_class*_spec.rb',
|
57
|
+
actual: 'wrong_class_spec.rb'
|
69
58
|
|
70
59
|
it 'skips specs that do not describe a class / method' do
|
71
60
|
inspect_source(
|
@@ -88,18 +77,6 @@ describe RuboCop::Cop::RSpec::FilePath, :config do
|
|
88
77
|
expect(cop.offenses).to be_empty
|
89
78
|
end
|
90
79
|
|
91
|
-
it 'ignores second argument if is not a string' do
|
92
|
-
inspect_source(
|
93
|
-
cop,
|
94
|
-
'describe MyClass, :foo do; end',
|
95
|
-
'wrong_class_spec.rb'
|
96
|
-
)
|
97
|
-
expect(cop.offenses.size).to eq(1)
|
98
|
-
expect(cop.offenses.map(&:line).sort).to eq([1])
|
99
|
-
expect(cop.messages)
|
100
|
-
.to eq(['Spec path should end with `my_class*_spec.rb`'])
|
101
|
-
end
|
102
|
-
|
103
80
|
it 'checks class specs' do
|
104
81
|
inspect_source(
|
105
82
|
cop,
|
@@ -37,7 +37,7 @@ describe RuboCop::Cop::RSpec::Focus do
|
|
37
37
|
RUBY
|
38
38
|
end
|
39
39
|
|
40
|
-
it 'flags all
|
40
|
+
it 'flags all rspec example blocks that include `:focus`' do
|
41
41
|
expect_violation(<<-RUBY)
|
42
42
|
example_group 'test', :focus do; end
|
43
43
|
^^^^^^ Focused spec found.
|
@@ -0,0 +1,189 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
describe RuboCop::Cop::RSpec::HookArgument, :config do
|
4
|
+
subject(:cop) { described_class.new(config) }
|
5
|
+
|
6
|
+
let(:cop_config) do
|
7
|
+
{ 'EnforcedStyle' => enforced_style }
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:enforced_style) { :implicit }
|
11
|
+
|
12
|
+
shared_examples 'ignored hooks' do
|
13
|
+
it 'ignores :context and :suite' do
|
14
|
+
expect_no_violations(<<-RUBY)
|
15
|
+
before(:suite) { true }
|
16
|
+
after(:suite) { true }
|
17
|
+
before(:context) { true }
|
18
|
+
after(:context) { true }
|
19
|
+
RUBY
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'ignores hooks with more than one argument' do
|
23
|
+
expect_no_violations(<<-RUBY)
|
24
|
+
before(:each, :something_custom) { true }
|
25
|
+
RUBY
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'ignores non-rspec hooks' do
|
29
|
+
expect_no_violations(<<-RUBY)
|
30
|
+
setup(:each) { true }
|
31
|
+
RUBY
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
shared_examples 'generated config' do |source, detected_style|
|
36
|
+
it 'generates a todo based on the detected style' do
|
37
|
+
inspect_source(cop, source, 'foo_spec.rb')
|
38
|
+
|
39
|
+
expect(cop.config_to_allow_offenses)
|
40
|
+
.to eq('EnforcedStyle' => detected_style)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
shared_examples 'hook autocorrect' do |output|
|
45
|
+
it 'autocorrects :each to EnforcedStyle' do
|
46
|
+
corrected =
|
47
|
+
autocorrect_source(cop, 'before(:each) { }', 'spec/foo_spec.rb')
|
48
|
+
|
49
|
+
expect(corrected).to eql(output)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'autocorrects :example to EnforcedStyle' do
|
53
|
+
corrected =
|
54
|
+
autocorrect_source(cop, 'before(:example) { }', 'spec/foo_spec.rb')
|
55
|
+
|
56
|
+
expect(corrected).to eql(output)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'autocorrects :implicit to EnforcedStyle' do
|
60
|
+
corrected =
|
61
|
+
autocorrect_source(cop, 'before { }', 'spec/foo_spec.rb')
|
62
|
+
|
63
|
+
expect(corrected).to eql(output)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
shared_examples 'an example hook' do
|
68
|
+
include_examples 'ignored hooks'
|
69
|
+
include_examples 'generated config', 'before(:each) { foo }', 'each'
|
70
|
+
include_examples 'generated config', 'before(:example) { foo }', 'example'
|
71
|
+
include_examples 'generated config', 'before { foo }', 'implicit'
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'when EnforcedStyle is :implicit' do
|
75
|
+
let(:enforced_style) { :implicit }
|
76
|
+
|
77
|
+
it 'detects :each for hooks' do
|
78
|
+
expect_violation(<<-RUBY)
|
79
|
+
before(:each) { true }
|
80
|
+
^^^^^^^^^^^^^ Omit the default `:each` argument for RSpec hooks.
|
81
|
+
after(:each) { true }
|
82
|
+
^^^^^^^^^^^^ Omit the default `:each` argument for RSpec hooks.
|
83
|
+
around(:each) { true }
|
84
|
+
^^^^^^^^^^^^^ Omit the default `:each` argument for RSpec hooks.
|
85
|
+
RUBY
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'detects :example for hooks' do
|
89
|
+
expect_violation(<<-RUBY)
|
90
|
+
before(:example) { true }
|
91
|
+
^^^^^^^^^^^^^^^^ Omit the default `:example` argument for RSpec hooks.
|
92
|
+
after(:example) { true }
|
93
|
+
^^^^^^^^^^^^^^^ Omit the default `:example` argument for RSpec hooks.
|
94
|
+
around(:example) { true }
|
95
|
+
^^^^^^^^^^^^^^^^ Omit the default `:example` argument for RSpec hooks.
|
96
|
+
RUBY
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'does not flag hooks without default scopes' do
|
100
|
+
expect_no_violations(<<-RUBY)
|
101
|
+
before { true }
|
102
|
+
after { true }
|
103
|
+
before { true }
|
104
|
+
after { true }
|
105
|
+
RUBY
|
106
|
+
end
|
107
|
+
|
108
|
+
include_examples 'an example hook'
|
109
|
+
include_examples 'hook autocorrect', 'before { }'
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'when EnforcedStyle is :each' do
|
113
|
+
let(:enforced_style) { :each }
|
114
|
+
|
115
|
+
it 'detects :each for hooks' do
|
116
|
+
expect_no_violations(<<-RUBY)
|
117
|
+
before(:each) { true }
|
118
|
+
after(:each) { true }
|
119
|
+
around(:each) { true }
|
120
|
+
RUBY
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'detects :example for hooks' do
|
124
|
+
expect_violation(<<-RUBY)
|
125
|
+
before(:example) { true }
|
126
|
+
^^^^^^^^^^^^^^^^ Use `:each` for RSpec hooks.
|
127
|
+
after(:example) { true }
|
128
|
+
^^^^^^^^^^^^^^^ Use `:each` for RSpec hooks.
|
129
|
+
around(:example) { true }
|
130
|
+
^^^^^^^^^^^^^^^^ Use `:each` for RSpec hooks.
|
131
|
+
RUBY
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'does not flag hooks without default scopes' do
|
135
|
+
expect_violation(<<-RUBY)
|
136
|
+
before { true }
|
137
|
+
^^^^^^ Use `:each` for RSpec hooks.
|
138
|
+
after { true }
|
139
|
+
^^^^^ Use `:each` for RSpec hooks.
|
140
|
+
before { true }
|
141
|
+
^^^^^^ Use `:each` for RSpec hooks.
|
142
|
+
after { true }
|
143
|
+
^^^^^ Use `:each` for RSpec hooks.
|
144
|
+
RUBY
|
145
|
+
end
|
146
|
+
|
147
|
+
include_examples 'an example hook'
|
148
|
+
include_examples 'hook autocorrect', 'before(:each) { }'
|
149
|
+
end
|
150
|
+
|
151
|
+
context 'when EnforcedStyle is :example' do
|
152
|
+
let(:enforced_style) { :example }
|
153
|
+
|
154
|
+
it 'detects :example for hooks' do
|
155
|
+
expect_no_violations(<<-RUBY)
|
156
|
+
before(:example) { true }
|
157
|
+
after(:example) { true }
|
158
|
+
around(:example) { true }
|
159
|
+
RUBY
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'detects :each for hooks' do
|
163
|
+
expect_violation(<<-RUBY)
|
164
|
+
before(:each) { true }
|
165
|
+
^^^^^^^^^^^^^ Use `:example` for RSpec hooks.
|
166
|
+
after(:each) { true }
|
167
|
+
^^^^^^^^^^^^ Use `:example` for RSpec hooks.
|
168
|
+
around(:each) { true }
|
169
|
+
^^^^^^^^^^^^^ Use `:example` for RSpec hooks.
|
170
|
+
RUBY
|
171
|
+
end
|
172
|
+
|
173
|
+
it 'does not flag hooks without default scopes' do
|
174
|
+
expect_violation(<<-RUBY)
|
175
|
+
before { true }
|
176
|
+
^^^^^^ Use `:example` for RSpec hooks.
|
177
|
+
after { true }
|
178
|
+
^^^^^ Use `:example` for RSpec hooks.
|
179
|
+
before { true }
|
180
|
+
^^^^^^ Use `:example` for RSpec hooks.
|
181
|
+
after { true }
|
182
|
+
^^^^^ Use `:example` for RSpec hooks.
|
183
|
+
RUBY
|
184
|
+
end
|
185
|
+
|
186
|
+
include_examples 'an example hook'
|
187
|
+
include_examples 'hook autocorrect', 'before(:example) { }'
|
188
|
+
end
|
189
|
+
end
|