diff --git a/CHANGELOG.md b/CHANGELOG.md index b0221b04f..ad1d698e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * Add `IgnoredMetadata` configuration option to `RSpec/DescribeClass`. ([@Rafix02][]) * Fix false positives in `RSpec/EmptyExampleGroup`. ([@pirj][]) * Fix a false positive for `RSpec/EmptyExampleGroup` when example is defined in an `if` branch. ([@koic][]) +* Fix a false positive for `RSpec/RepeatedExampleGroupBody` when `pending` or `skip` have argument(s). ([@Tietew][]) ## 1.43.2 (2020-08-25) @@ -565,3 +566,4 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features. [@biinari]: https://github.com/biinari [@koic]: https://github.com/koic [@Rafix02]: https://github.com/Rafix02 +[@Tietew]: https://github.com/Tietew diff --git a/lib/rubocop/cop/rspec/repeated_example_group_body.rb b/lib/rubocop/cop/rspec/repeated_example_group_body.rb index cfa1f78a7..8a3214c16 100644 --- a/lib/rubocop/cop/rspec/repeated_example_group_body.rb +++ b/lib/rubocop/cop/rspec/repeated_example_group_body.rb @@ -55,7 +55,7 @@ class RepeatedExampleGroupBody < Base def_node_matcher :const_arg, '(block (send _ _ $const ...) ...)' def_node_matcher :skip_or_pending?, <<-PATTERN - (block <(send nil? {:skip :pending}) ...>) + (block <(send nil? {:skip :pending} ...) ...>) PATTERN def on_begin(node) diff --git a/spec/rubocop/cop/rspec/repeated_example_group_body_spec.rb b/spec/rubocop/cop/rspec/repeated_example_group_body_spec.rb index c30d9533c..c19e78646 100644 --- a/spec/rubocop/cop/rspec/repeated_example_group_body_spec.rb +++ b/spec/rubocop/cop/rspec/repeated_example_group_body_spec.rb @@ -226,6 +226,50 @@ RUBY end + it 'skips `skip` and `pending` statements with arguments' do + expect_no_offenses(<<-RUBY) + describe '#load' do + skip 'storage feature needed' + end + + describe '#save' do + skip 'storage feature needed' + end + + describe '#get_foo' do + pending 'foo feature is broken' + end + + describe '#set_foo' do + pending 'foo feature is broken' + end + RUBY + end + + it 'registers offense correctly if `skip` and `pending` have block' do + expect_offense(<<-RUBY) + describe '#load' do + ^^^^^^^^^^^^^^^^^^^ Repeated describe block body on line(s) [5] + skip { cool_predicate_method } + end + + describe '#save' do + ^^^^^^^^^^^^^^^^^^^ Repeated describe block body on line(s) [1] + skip { cool_predicate_method } + end + + describe '#get_foo' do + ^^^^^^^^^^^^^^^^^^^^^^ Repeated describe block body on line(s) [13] + pending { cool_predicate_method } + end + + describe '#set_foo' do + ^^^^^^^^^^^^^^^^^^^^^^ Repeated describe block body on line(s) [9] + pending { cool_predicate_method } + end + RUBY + end + it 'registers offense correctly if example groups are separated' do expect_offense(<<-RUBY) describe 'repeated' do