rubocop-rspec 1.32.0 → 1.33.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 +11 -0
- data/Gemfile +2 -0
- data/Rakefile +2 -0
- data/config/default.yml +6 -0
- data/lib/rubocop-rspec.rb +3 -0
- data/lib/rubocop/cop/rspec/align_left_let_brace.rb +1 -1
- data/lib/rubocop/cop/rspec/align_right_let_brace.rb +1 -1
- data/lib/rubocop/cop/rspec/any_instance.rb +3 -1
- data/lib/rubocop/cop/rspec/around_block.rb +4 -2
- data/lib/rubocop/cop/rspec/be.rb +4 -2
- data/lib/rubocop/cop/rspec/be_eql.rb +3 -1
- data/lib/rubocop/cop/rspec/before_after_all.rb +1 -1
- data/lib/rubocop/cop/rspec/capybara/current_path_expectation.rb +5 -3
- data/lib/rubocop/cop/rspec/capybara/feature_methods.rb +3 -3
- data/lib/rubocop/cop/rspec/context_wording.rb +2 -2
- data/lib/rubocop/cop/rspec/describe_class.rb +4 -4
- data/lib/rubocop/cop/rspec/describe_method.rb +2 -2
- data/lib/rubocop/cop/rspec/describe_symbol.rb +2 -2
- data/lib/rubocop/cop/rspec/described_class.rb +3 -3
- data/lib/rubocop/cop/rspec/dialect.rb +76 -0
- data/lib/rubocop/cop/rspec/empty_example_group.rb +1 -1
- data/lib/rubocop/cop/rspec/empty_line_after_example_group.rb +1 -1
- data/lib/rubocop/cop/rspec/empty_line_after_final_let.rb +1 -1
- data/lib/rubocop/cop/rspec/empty_line_after_hook.rb +1 -1
- data/lib/rubocop/cop/rspec/empty_line_after_subject.rb +1 -1
- data/lib/rubocop/cop/rspec/example_length.rb +1 -1
- data/lib/rubocop/cop/rspec/example_without_description.rb +2 -2
- data/lib/rubocop/cop/rspec/example_wording.rb +2 -2
- data/lib/rubocop/cop/rspec/expect_actual.rb +1 -1
- data/lib/rubocop/cop/rspec/expect_change.rb +2 -2
- data/lib/rubocop/cop/rspec/expect_in_hook.rb +1 -1
- data/lib/rubocop/cop/rspec/expect_output.rb +1 -1
- data/lib/rubocop/cop/rspec/factory_bot/attribute_defined_statically.rb +21 -40
- data/lib/rubocop/cop/rspec/factory_bot/create_list.rb +2 -2
- data/lib/rubocop/cop/rspec/file_path.rb +2 -2
- data/lib/rubocop/cop/rspec/focus.rb +3 -3
- data/lib/rubocop/cop/rspec/hook_argument.rb +4 -6
- data/lib/rubocop/cop/rspec/hooks_before_examples.rb +2 -5
- data/lib/rubocop/cop/rspec/implicit_expect.rb +2 -2
- data/lib/rubocop/cop/rspec/implicit_subject.rb +1 -1
- data/lib/rubocop/cop/rspec/instance_spy.rb +1 -1
- data/lib/rubocop/cop/rspec/instance_variable.rb +1 -1
- data/lib/rubocop/cop/rspec/invalid_predicate_matcher.rb +4 -2
- data/lib/rubocop/cop/rspec/it_behaves_like.rb +1 -1
- data/lib/rubocop/cop/rspec/iterated_expectation.rb +3 -1
- data/lib/rubocop/cop/rspec/leading_subject.rb +1 -2
- data/lib/rubocop/cop/rspec/let_before_examples.rb +2 -5
- data/lib/rubocop/cop/rspec/let_setup.rb +1 -1
- data/lib/rubocop/cop/rspec/message_chain.rb +3 -1
- data/lib/rubocop/cop/rspec/message_expectation.rb +1 -1
- data/lib/rubocop/cop/rspec/message_spies.rb +3 -4
- data/lib/rubocop/cop/rspec/missing_example_group_argument.rb +1 -1
- data/lib/rubocop/cop/rspec/multiple_describes.rb +1 -1
- data/lib/rubocop/cop/rspec/multiple_expectations.rb +1 -1
- data/lib/rubocop/cop/rspec/multiple_subjects.rb +6 -2
- data/lib/rubocop/cop/rspec/named_subject.rb +1 -1
- data/lib/rubocop/cop/rspec/nested_groups.rb +3 -4
- data/lib/rubocop/cop/rspec/not_to_not.rb +3 -1
- data/lib/rubocop/cop/rspec/overwriting_setup.rb +1 -1
- data/lib/rubocop/cop/rspec/pending.rb +3 -3
- data/lib/rubocop/cop/rspec/predicate_matcher.rb +17 -14
- data/lib/rubocop/cop/rspec/rails/http_status.rb +2 -2
- data/lib/rubocop/cop/rspec/receive_counts.rb +5 -6
- data/lib/rubocop/cop/rspec/receive_never.rb +4 -7
- data/lib/rubocop/cop/rspec/repeated_description.rb +3 -1
- data/lib/rubocop/cop/rspec/repeated_example.rb +3 -1
- data/lib/rubocop/cop/rspec/return_from_stub.rb +2 -2
- data/lib/rubocop/cop/rspec/scattered_let.rb +1 -1
- data/lib/rubocop/cop/rspec/scattered_setup.rb +1 -1
- data/lib/rubocop/cop/rspec/shared_context.rb +2 -2
- data/lib/rubocop/cop/rspec/shared_examples.rb +7 -7
- data/lib/rubocop/cop/rspec/single_argument_message_chain.rb +3 -1
- data/lib/rubocop/cop/rspec/subject_stub.rb +1 -1
- data/lib/rubocop/cop/rspec/unspecified_exception.rb +5 -3
- data/lib/rubocop/cop/rspec/verified_doubles.rb +2 -2
- data/lib/rubocop/cop/rspec/void_expect.rb +1 -1
- data/lib/rubocop/cop/rspec/yield.rb +2 -4
- data/lib/rubocop/cop/rspec_cops.rb +3 -0
- data/lib/rubocop/rspec.rb +2 -0
- data/lib/rubocop/rspec/blank_line_separation.rb +3 -1
- data/lib/rubocop/rspec/config_formatter.rb +3 -1
- data/lib/rubocop/rspec/description_extractor.rb +3 -1
- data/lib/rubocop/rspec/factory_bot.rb +58 -0
- data/lib/rubocop/rspec/final_end_location.rb +2 -0
- data/lib/rubocop/rspec/inject.rb +2 -0
- data/lib/rubocop/rspec/language.rb +9 -2
- data/lib/rubocop/rspec/top_level_describe.rb +2 -0
- data/lib/rubocop/rspec/version.rb +1 -1
- data/rubocop-rspec.gemspec +3 -1
- data/spec/project/changelog_spec.rb +2 -0
- data/spec/project/default_config_spec.rb +2 -0
- data/spec/project/project_requires_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/align_left_let_brace_spec.rb +22 -37
- data/spec/rubocop/cop/rspec/align_right_let_brace_spec.rb +21 -36
- data/spec/rubocop/cop/rspec/any_instance_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/around_block_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/be_eql_spec.rb +25 -4
- data/spec/rubocop/cop/rspec/be_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/before_after_all_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/capybara/current_path_expectation_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/capybara/feature_methods_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/context_wording_spec.rb +32 -0
- data/spec/rubocop/cop/rspec/describe_class_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/describe_method_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/describe_symbol_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/described_class_spec.rb +4 -1
- data/spec/rubocop/cop/rspec/dialect_spec.rb +78 -0
- data/spec/rubocop/cop/rspec/empty_line_after_example_group_spec.rb +40 -21
- data/spec/rubocop/cop/rspec/empty_line_after_final_let_spec.rb +77 -69
- data/spec/rubocop/cop/rspec/empty_line_after_hook_spec.rb +24 -19
- data/spec/rubocop/cop/rspec/empty_line_after_subject_spec.rb +16 -19
- data/spec/rubocop/cop/rspec/example_length_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/example_without_description_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/example_wording_spec.rb +45 -24
- data/spec/rubocop/cop/rspec/expect_change_spec.rb +22 -14
- data/spec/rubocop/cop/rspec/factory_bot/attribute_defined_statically_spec.rb +36 -0
- data/spec/rubocop/cop/rspec/factory_bot/create_list_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/file_path_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/focus_spec.rb +2 -2
- data/spec/rubocop/cop/rspec/hook_argument_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/hooks_before_examples_spec.rb +47 -32
- data/spec/rubocop/cop/rspec/implicit_expect_spec.rb +20 -19
- data/spec/rubocop/cop/rspec/implicit_subject_spec.rb +56 -68
- data/spec/rubocop/cop/rspec/instance_spy_spec.rb +16 -15
- data/spec/rubocop/cop/rspec/instance_variable_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/invalid_predicate_matcher_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/it_behaves_like_spec.rb +10 -12
- data/spec/rubocop/cop/rspec/iterated_expectation_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/leading_subject_spec.rb +31 -47
- data/spec/rubocop/cop/rspec/let_before_examples_spec.rb +27 -26
- data/spec/rubocop/cop/rspec/message_chain_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/missing_example_group_argument_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/multiple_describes_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/multiple_subjects_spec.rb +24 -37
- data/spec/rubocop/cop/rspec/not_to_not_spec.rb +22 -32
- data/spec/rubocop/cop/rspec/overwriting_setup_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/pending_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/predicate_matcher_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/receive_counts_spec.rb +47 -8
- data/spec/rubocop/cop/rspec/receive_never_spec.rb +16 -4
- data/spec/rubocop/cop/rspec/return_from_stub_spec.rb +95 -72
- data/spec/rubocop/cop/rspec/scattered_let_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/scattered_setup_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/shared_context_spec.rb +29 -34
- data/spec/rubocop/cop/rspec/shared_examples_spec.rb +16 -34
- data/spec/rubocop/cop/rspec/single_argument_message_chain_spec.rb +44 -48
- data/spec/rubocop/cop/rspec/unspecified_exception_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/verified_doubles_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/void_expect_spec.rb +2 -0
- data/spec/rubocop/cop/rspec/yield_spec.rb +22 -21
- data/spec/rubocop/rspec/config_formatter_spec.rb +2 -0
- data/spec/rubocop/rspec/description_extractor_spec.rb +2 -0
- data/spec/rubocop/rspec/language/selector_set_spec.rb +2 -0
- data/spec/rubocop/rspec/util/one_spec.rb +2 -0
- data/spec/rubocop/rspec/wording_spec.rb +2 -0
- data/spec/shared/autocorrect_behavior.rb +2 -0
- data/spec/shared/detects_style_behavior.rb +2 -0
- data/spec/shared/smoke_test_examples.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/expect_offense.rb +3 -1
- metadata +8 -4
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
RSpec.describe RuboCop::Cop::RSpec::BeEql do
|
2
4
|
subject(:cop) { described_class.new }
|
3
5
|
|
@@ -8,6 +10,11 @@ RSpec.describe RuboCop::Cop::RSpec::BeEql do
|
|
8
10
|
it { expect(foo).to eql(false) }
|
9
11
|
^^^ Prefer `be` over `eql`.
|
10
12
|
RUBY
|
13
|
+
|
14
|
+
expect_correction(<<-RUBY)
|
15
|
+
it { expect(foo).to be(true) }
|
16
|
+
it { expect(foo).to be(false) }
|
17
|
+
RUBY
|
11
18
|
end
|
12
19
|
|
13
20
|
it 'registers an offense for `eql` when argument is an integer' do
|
@@ -17,6 +24,11 @@ RSpec.describe RuboCop::Cop::RSpec::BeEql do
|
|
17
24
|
it { expect(foo).to eql(123) }
|
18
25
|
^^^ Prefer `be` over `eql`.
|
19
26
|
RUBY
|
27
|
+
|
28
|
+
expect_correction(<<-RUBY)
|
29
|
+
it { expect(foo).to be(0) }
|
30
|
+
it { expect(foo).to be(123) }
|
31
|
+
RUBY
|
20
32
|
end
|
21
33
|
|
22
34
|
it 'registers an offense for `eql` when argument is a float' do
|
@@ -26,6 +38,11 @@ RSpec.describe RuboCop::Cop::RSpec::BeEql do
|
|
26
38
|
it { expect(foo).to eql(1.23) }
|
27
39
|
^^^ Prefer `be` over `eql`.
|
28
40
|
RUBY
|
41
|
+
|
42
|
+
expect_correction(<<-RUBY)
|
43
|
+
it { expect(foo).to be(1.0) }
|
44
|
+
it { expect(foo).to be(1.23) }
|
45
|
+
RUBY
|
29
46
|
end
|
30
47
|
|
31
48
|
it 'registers an offense for `eql` when argument is a symbol' do
|
@@ -33,6 +50,10 @@ RSpec.describe RuboCop::Cop::RSpec::BeEql do
|
|
33
50
|
it { expect(foo).to eql(:foo) }
|
34
51
|
^^^ Prefer `be` over `eql`.
|
35
52
|
RUBY
|
53
|
+
|
54
|
+
expect_correction(<<-RUBY)
|
55
|
+
it { expect(foo).to be(:foo) }
|
56
|
+
RUBY
|
36
57
|
end
|
37
58
|
|
38
59
|
it 'registers an offense for `eql` when argument is nil' do
|
@@ -40,6 +61,10 @@ RSpec.describe RuboCop::Cop::RSpec::BeEql do
|
|
40
61
|
it { expect(foo).to eql(nil) }
|
41
62
|
^^^ Prefer `be` over `eql`.
|
42
63
|
RUBY
|
64
|
+
|
65
|
+
expect_correction(<<-RUBY)
|
66
|
+
it { expect(foo).to be(nil) }
|
67
|
+
RUBY
|
43
68
|
end
|
44
69
|
|
45
70
|
it 'does not register an offense for `eql` when argument is a string' do
|
@@ -53,8 +78,4 @@ RSpec.describe RuboCop::Cop::RSpec::BeEql do
|
|
53
78
|
it { expect(foo).to_not eql(1) }
|
54
79
|
RUBY
|
55
80
|
end
|
56
|
-
|
57
|
-
include_examples 'autocorrect',
|
58
|
-
'it { expect(foo).to eql(1) }',
|
59
|
-
'it { expect(foo).to be(1) }'
|
60
81
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
RSpec.describe RuboCop::Cop::RSpec::ContextWording, :config do
|
2
4
|
subject(:cop) { described_class.new(config) }
|
3
5
|
|
@@ -41,6 +43,36 @@ RSpec.describe RuboCop::Cop::RSpec::ContextWording, :config do
|
|
41
43
|
RUBY
|
42
44
|
end
|
43
45
|
|
46
|
+
context 'with metadata hash' do
|
47
|
+
it 'finds context without separate `when` at the beginning' do
|
48
|
+
expect_offense(<<-RUBY)
|
49
|
+
context 'whenever you do', legend: true do
|
50
|
+
^^^^^^^^^^^^^^^^^ Start context description with 'when', or 'with'.
|
51
|
+
end
|
52
|
+
RUBY
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with symbol metadata' do
|
57
|
+
it 'finds context without separate `when` at the beginning' do
|
58
|
+
expect_offense(<<-RUBY)
|
59
|
+
context 'whenever you do', :legend do
|
60
|
+
^^^^^^^^^^^^^^^^^ Start context description with 'when', or 'with'.
|
61
|
+
end
|
62
|
+
RUBY
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'with mixed metadata' do
|
67
|
+
it 'finds context without separate `when` at the beginning' do
|
68
|
+
expect_offense(<<-RUBY)
|
69
|
+
context 'whenever you do', :legend, myth: true do
|
70
|
+
^^^^^^^^^^^^^^^^^ Start context description with 'when', or 'with'.
|
71
|
+
end
|
72
|
+
RUBY
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
44
76
|
context 'when configured' do
|
45
77
|
let(:cop_config) { { 'Prefixes' => %w[if] } }
|
46
78
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
RSpec.describe RuboCop::Cop::RSpec::DescribedClass, :config do
|
2
4
|
subject(:cop) { described_class.new(config) }
|
3
5
|
|
@@ -112,6 +114,7 @@ RSpec.describe RuboCop::Cop::RSpec::DescribedClass, :config do
|
|
112
114
|
describe MyClass do
|
113
115
|
Class.new { foo = MyClass }
|
114
116
|
Module.new { bar = MyClass }
|
117
|
+
Struct.new { lol = MyClass }
|
115
118
|
|
116
119
|
def method
|
117
120
|
include MyClass
|
@@ -121,7 +124,7 @@ RSpec.describe RuboCop::Cop::RSpec::DescribedClass, :config do
|
|
121
124
|
include MyClass
|
122
125
|
end
|
123
126
|
|
124
|
-
module
|
127
|
+
module MyModule
|
125
128
|
include MyClass
|
126
129
|
end
|
127
130
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RuboCop::Cop::RSpec::Dialect, :config do
|
4
|
+
subject(:cop) { described_class.new(config) }
|
5
|
+
|
6
|
+
let(:cop_config) do
|
7
|
+
{
|
8
|
+
'PreferredMethods' => {
|
9
|
+
'context' => 'describe'
|
10
|
+
}
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'allows describe blocks' do
|
15
|
+
expect_no_offenses(<<-RUBY)
|
16
|
+
describe 'display name presence' do
|
17
|
+
end
|
18
|
+
RUBY
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'allows calling methods named context in examples' do
|
22
|
+
expect_no_offenses(<<-RUBY)
|
23
|
+
it 'tests common context invocations' do
|
24
|
+
expect(request.context).to be_empty?
|
25
|
+
end
|
26
|
+
RUBY
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'registers an offense for context blocks' do
|
30
|
+
expect_offense(<<-RUBY)
|
31
|
+
context 'display name presence' do
|
32
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer `describe` over `context`.
|
33
|
+
end
|
34
|
+
RUBY
|
35
|
+
|
36
|
+
expect_correction(<<-RUBY)
|
37
|
+
describe 'display name presence' do
|
38
|
+
end
|
39
|
+
RUBY
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'registers an offense for RSpec.context blocks' do
|
43
|
+
expect_offense(<<-RUBY)
|
44
|
+
RSpec.context 'context' do
|
45
|
+
^^^^^^^^^^^^^^^^^^^^^^^ Prefer `describe` over `context`.
|
46
|
+
it 'tests common context invocations' do
|
47
|
+
expect(request.context).to be_empty?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
RUBY
|
51
|
+
|
52
|
+
expect_correction(<<-RUBY)
|
53
|
+
RSpec.describe 'context' do
|
54
|
+
it 'tests common context invocations' do
|
55
|
+
expect(request.context).to be_empty?
|
56
|
+
end
|
57
|
+
end
|
58
|
+
RUBY
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'without preferred methods' do
|
62
|
+
let(:cop_config) do
|
63
|
+
{
|
64
|
+
'PreferredMethods' => {}
|
65
|
+
}
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'allows all methods blocks' do
|
69
|
+
expect_no_offenses(<<-RUBY)
|
70
|
+
context 'is important' do
|
71
|
+
specify 'for someone to work' do
|
72
|
+
everyone.should have_some_leeway
|
73
|
+
end
|
74
|
+
end
|
75
|
+
RUBY
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -13,6 +13,16 @@ RSpec.describe RuboCop::Cop::RSpec::EmptyLineAfterExampleGroup do
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
RUBY
|
16
|
+
|
17
|
+
expect_correction(<<-RUBY)
|
18
|
+
RSpec.describe Foo do
|
19
|
+
describe '#bar' do
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#baz' do
|
23
|
+
end
|
24
|
+
end
|
25
|
+
RUBY
|
16
26
|
end
|
17
27
|
|
18
28
|
it 'highlights single line formulations correctly' do
|
@@ -24,6 +34,15 @@ RSpec.describe RuboCop::Cop::RSpec::EmptyLineAfterExampleGroup do
|
|
24
34
|
end
|
25
35
|
end
|
26
36
|
RUBY
|
37
|
+
|
38
|
+
expect_correction(<<-RUBY)
|
39
|
+
RSpec.describe Foo do
|
40
|
+
describe('#bar') { }
|
41
|
+
|
42
|
+
describe '#baz' do
|
43
|
+
end
|
44
|
+
end
|
45
|
+
RUBY
|
27
46
|
end
|
28
47
|
|
29
48
|
it 'checks for empty line after context' do
|
@@ -36,6 +55,16 @@ RSpec.describe RuboCop::Cop::RSpec::EmptyLineAfterExampleGroup do
|
|
36
55
|
end
|
37
56
|
end
|
38
57
|
RUBY
|
58
|
+
|
59
|
+
expect_correction(<<-RUBY)
|
60
|
+
RSpec.context 'foo' do
|
61
|
+
context 'bar' do
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'baz' do
|
65
|
+
end
|
66
|
+
end
|
67
|
+
RUBY
|
39
68
|
end
|
40
69
|
|
41
70
|
it 'approves empty line after describe' do
|
@@ -75,28 +104,18 @@ RSpec.describe RuboCop::Cop::RSpec::EmptyLineAfterExampleGroup do
|
|
75
104
|
end
|
76
105
|
end
|
77
106
|
RUBY
|
78
|
-
end
|
79
107
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
RUBY
|
88
|
-
|
89
|
-
good_example = <<-RUBY
|
90
|
-
RSpec.describe Foo do
|
91
|
-
describe '#bar' do
|
92
|
-
end
|
108
|
+
expect_correction(<<-RUBY)
|
109
|
+
if RUBY_VERSION < 2.3
|
110
|
+
describe 'skips checks under old ruby' do
|
111
|
+
end
|
112
|
+
else
|
113
|
+
describe 'first check' do
|
114
|
+
end
|
93
115
|
|
94
|
-
|
116
|
+
describe 'second check' do
|
117
|
+
end
|
95
118
|
end
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
include_examples 'autocorrect',
|
100
|
-
bad_example,
|
101
|
-
good_example
|
119
|
+
RUBY
|
120
|
+
end
|
102
121
|
end
|
@@ -12,6 +12,15 @@ RSpec.describe RuboCop::Cop::RSpec::EmptyLineAfterFinalLet do
|
|
12
12
|
it { expect(a).to eq(b) }
|
13
13
|
end
|
14
14
|
RUBY
|
15
|
+
|
16
|
+
expect_correction(<<-RUBY)
|
17
|
+
RSpec.describe User do
|
18
|
+
let(:a) { a }
|
19
|
+
let(:b) { b }
|
20
|
+
|
21
|
+
it { expect(a).to eq(b) }
|
22
|
+
end
|
23
|
+
RUBY
|
15
24
|
end
|
16
25
|
|
17
26
|
it 'check for empty line after the last `let!`' do
|
@@ -25,6 +34,17 @@ RSpec.describe RuboCop::Cop::RSpec::EmptyLineAfterFinalLet do
|
|
25
34
|
it { expect(a).to eq(b) }
|
26
35
|
end
|
27
36
|
RUBY
|
37
|
+
|
38
|
+
expect_correction(<<-RUBY)
|
39
|
+
RSpec.describe User do
|
40
|
+
let(:a) { a }
|
41
|
+
let!(:b) do
|
42
|
+
b
|
43
|
+
end
|
44
|
+
|
45
|
+
it { expect(a).to eq(b) }
|
46
|
+
end
|
47
|
+
RUBY
|
28
48
|
end
|
29
49
|
|
30
50
|
it 'approves empty line after let' do
|
@@ -60,6 +80,40 @@ RSpec.describe RuboCop::Cop::RSpec::EmptyLineAfterFinalLet do
|
|
60
80
|
it { expect(a).to eq(b) }
|
61
81
|
end
|
62
82
|
RUBY
|
83
|
+
|
84
|
+
expect_correction(<<-RUBY)
|
85
|
+
RSpec.describe User do
|
86
|
+
let(:a) { a }
|
87
|
+
let(:b) { b }
|
88
|
+
# end of setup
|
89
|
+
|
90
|
+
it { expect(a).to eq(b) }
|
91
|
+
end
|
92
|
+
RUBY
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'flags missing empty line after a multiline comment after last let' do
|
96
|
+
expect_offense(<<-RUBY)
|
97
|
+
RSpec.describe User do
|
98
|
+
let(:a) { a }
|
99
|
+
let(:b) { b }
|
100
|
+
# a multiline comment marking
|
101
|
+
# the end of setup
|
102
|
+
^^^^^^^^^^^^^^^^^^ Add an empty line after the last `let` block.
|
103
|
+
it { expect(a).to eq(b) }
|
104
|
+
end
|
105
|
+
RUBY
|
106
|
+
|
107
|
+
expect_correction(<<-RUBY)
|
108
|
+
RSpec.describe User do
|
109
|
+
let(:a) { a }
|
110
|
+
let(:b) { b }
|
111
|
+
# a multiline comment marking
|
112
|
+
# the end of setup
|
113
|
+
|
114
|
+
it { expect(a).to eq(b) }
|
115
|
+
end
|
116
|
+
RUBY
|
63
117
|
end
|
64
118
|
|
65
119
|
it 'ignores empty lines between the lets' do
|
@@ -74,6 +128,18 @@ RSpec.describe RuboCop::Cop::RSpec::EmptyLineAfterFinalLet do
|
|
74
128
|
it { expect(a).to eq(b) }
|
75
129
|
end
|
76
130
|
RUBY
|
131
|
+
|
132
|
+
expect_correction(<<-RUBY)
|
133
|
+
RSpec.describe User do
|
134
|
+
let(:a) { a }
|
135
|
+
|
136
|
+
subject { described_class }
|
137
|
+
|
138
|
+
let!(:b) { b }
|
139
|
+
|
140
|
+
it { expect(a).to eq(b) }
|
141
|
+
end
|
142
|
+
RUBY
|
77
143
|
end
|
78
144
|
|
79
145
|
it 'handles let in tests' do
|
@@ -156,76 +222,18 @@ RSpec.describe RuboCop::Cop::RSpec::EmptyLineAfterFinalLet do
|
|
156
222
|
end
|
157
223
|
end
|
158
224
|
RUBY
|
159
|
-
end
|
160
|
-
|
161
|
-
bad_example = <<-RUBY
|
162
|
-
RSpec.describe User do
|
163
|
-
let(:params) { foo }
|
164
|
-
it 'has a new line' do
|
165
|
-
end
|
166
|
-
end
|
167
|
-
RUBY
|
168
|
-
|
169
|
-
good_example = <<-RUBY
|
170
|
-
RSpec.describe User do
|
171
|
-
let(:params) { foo }
|
172
225
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
bad_example,
|
180
|
-
good_example
|
181
|
-
|
182
|
-
bad_example = <<-RUBY
|
183
|
-
RSpec.describe User do
|
184
|
-
let(:params) { foo }
|
185
|
-
# a multiline comment marking
|
186
|
-
# the end of setup
|
187
|
-
it 'has a new line' do
|
188
|
-
end
|
189
|
-
end
|
190
|
-
RUBY
|
191
|
-
|
192
|
-
good_example = <<-RUBY
|
193
|
-
RSpec.describe User do
|
194
|
-
let(:params) { foo }
|
195
|
-
# a multiline comment marking
|
196
|
-
# the end of setup
|
197
|
-
|
198
|
-
it 'has a new line' do
|
199
|
-
end
|
200
|
-
end
|
201
|
-
RUBY
|
202
|
-
|
203
|
-
include_examples 'autocorrect',
|
204
|
-
bad_example,
|
205
|
-
good_example
|
206
|
-
|
207
|
-
bad_example = <<-RUBY
|
208
|
-
RSpec.describe User do
|
209
|
-
let(:params) { <<-DOC }
|
210
|
-
I'm super annoying!
|
211
|
-
DOC
|
212
|
-
it 'has a new line' do
|
213
|
-
end
|
214
|
-
end
|
215
|
-
RUBY
|
216
|
-
|
217
|
-
good_example = <<-RUBY
|
218
|
-
RSpec.describe User do
|
219
|
-
let(:params) { <<-DOC }
|
220
|
-
I'm super annoying!
|
221
|
-
DOC
|
226
|
+
expect_correction(<<-RUBY)
|
227
|
+
RSpec.describe 'silly heredoc syntax' do
|
228
|
+
let(:foo) { <<-BAR }
|
229
|
+
hello
|
230
|
+
world
|
231
|
+
BAR
|
222
232
|
|
223
|
-
|
224
|
-
|
233
|
+
it 'has tricky syntax' do
|
234
|
+
expect(foo).to eql(" hello\n world\n")
|
235
|
+
end
|
236
|
+
end
|
237
|
+
RUBY
|
225
238
|
end
|
226
|
-
RUBY
|
227
|
-
|
228
|
-
include_examples 'autocorrect',
|
229
|
-
bad_example,
|
230
|
-
good_example
|
231
239
|
end
|