Skip to content

Commit

Permalink
Add an else condition to correct StubbedMock behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
corsonknowles committed Nov 16, 2024
1 parent e80d28c commit 2f4763e
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 10 deletions.
21 changes: 12 additions & 9 deletions lib/rubocop/cop/rspec/stubbed_mock.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ module RSpec
# expect(foo).to receive(:bar).with(42)
#
class StubbedMock < Base
MSG = 'Prefer `%<replacement>s` over `%<method_name>s` when ' \
MSG = 'Prefer %<replacement>s over `%<method_name>s` when ' \
'configuring a response.'
RESTRICT_ON_SEND = %i[to].freeze

# @!method message_expectation?(node)
# Match message expectation matcher
Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand Down
9 changes: 8 additions & 1 deletion spec/rubocop/cop/rspec/stubbed_mock_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,19 @@
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.
.to receive(:new)
.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

0 comments on commit 2f4763e

Please sign in to comment.