rspec-support
rspec-support copied to clipboard
Combination of option hash and keyword arguments causes crashes
Subject of the issue
When verified doubles are turned on, a particular combination of method arguments causes RSpec to crash - it gets confused with the method signature.
Your environment
- Ruby version: 3.0
- rspec-mocks version: 3.10.2
Steps to reproduce
Run the following file:
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'rspec'
end
require "rspec/autorun"
RSpec.configure do |config|
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end
module MyModule
def self.my_func(arg1, arg2, options={}, kw: false)
end
end
RSpec.describe MyModule do
it 'should pass' do
allow(MyModule).to receive(:my_func).and_return('hi mom')
MyModule.my_func(1, 2, { foo: 'bar', baz: 'eggs' })
end
end
Expected behavior
The spec should pass.
Actual behavior
Fails with the following error:
Failure/Error: MyModule.my_func(1, 2, { foo: 'bar', baz: 'eggs' })
ArgumentError:
Invalid keyword arguments provided: foo, baz
Note that if you replace the call by explicitly calling the keyword argument and not relying on the default, the spec passes: MyModule.my_func(1, 2, { foo: 'bar', baz: 'eggs' }, kw: false)