From 2f4763e81be1e5a0f84612ac76cfa97c0136784a Mon Sep 17 00:00:00 2001 From: Dave Corson-Knowles Date: Sat, 2 Nov 2024 14:52:03 -0700 Subject: [PATCH] Add an else condition to correct `StubbedMock` behavior --- lib/rubocop/cop/rspec/stubbed_mock.rb | 21 ++++++++++++--------- spec/rubocop/cop/rspec/stubbed_mock_spec.rb | 9 ++++++++- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lib/rubocop/cop/rspec/stubbed_mock.rb b/lib/rubocop/cop/rspec/stubbed_mock.rb index 0b7d0a0a7..1787246c5 100644 --- a/lib/rubocop/cop/rspec/stubbed_mock.rb +++ b/lib/rubocop/cop/rspec/stubbed_mock.rb @@ -14,8 +14,9 @@ module RSpec # expect(foo).to receive(:bar).with(42) # class StubbedMock < Base - MSG = 'Prefer `%s` over `%s` when ' \ + MSG = 'Prefer %s over `%s` when ' \ 'configuring a response.' + RESTRICT_ON_SEND = %i[to].freeze # @!method message_expectation?(node) # Match message expectation matcher @@ -133,8 +134,6 @@ class StubbedMock < Base } PATTERN - RESTRICT_ON_SEND = %i[to].freeze - def on_send(node) expectation(node) do |expectation, method_name, matcher| on_expectation(expectation, method_name, matcher) @@ -155,19 +154,23 @@ def on_expectation(expectation, method_name, matcher) end def msg(method_name) - format(MSG, - method_name: method_name, - replacement: replacement(method_name)) + format( + MSG, + method_name: method_name, + replacement: replacement(method_name) + ) end def replacement(method_name) case method_name when :expect - :allow + '`allow`' when :is_expected - 'allow(subject)' + '`allow(subject)`' when :expect_any_instance_of - :allow_any_instance_of + '`allow_any_instance_of`' + else + 'an allow statement' end end end diff --git a/spec/rubocop/cop/rspec/stubbed_mock_spec.rb b/spec/rubocop/cop/rspec/stubbed_mock_spec.rb index 37ee2e686..1c920b638 100644 --- a/spec/rubocop/cop/rspec/stubbed_mock_spec.rb +++ b/spec/rubocop/cop/rspec/stubbed_mock_spec.rb @@ -126,7 +126,7 @@ RUBY end - it 'tolerates passed arguments without parentheses' do + it 'flags even when passed arguments without parentheses' do expect_offense(<<~RUBY) expect(Foo) ^^^^^^^^^^^ Prefer `allow` over `expect` when configuring a response. @@ -134,4 +134,11 @@ .with(bar).and_return baz RUBY end + + it 'flags `are_expected`' do + expect_offense(<<~RUBY) + are_expected.to receive(:bar).and_return(:baz) + ^^^^^^^^^^^^ Prefer an allow statement over `are_expected` when configuring a response. + RUBY + end end