Minitest Mock#expect无法接收第四个关键字参数问题求助
解决Minitest Mock验证关键字参数方法调用的参数错误问题
你遇到的ArgumentError是因为mock预期的参数写法有误,或者测试运行时未使用正确的Minitest版本。以下是具体排查和解决步骤:
1. 确认使用指定的Minitest版本
先确保运行测试时通过bundle exec调用,比如执行bundle exec rake test,这样能保证使用Gemfile.lock中记录的5.18.0版本,避免调用系统中旧版本的Minitest(旧版本可能不支持单独指定关键字参数)。
2. 修正mock预期的写法
在Minitest 5.11+(包含5.18.0)中,支持单独区分位置参数和关键字参数,正确的mock预期写法应该是:
test ".toggle updates the category" do mock = Minitest::Mock.new # 第三个参数是空数组(无位置参数),第四个参数是关键字参数 mock.expect :update!, nil, [], collapsed: true CategoryAnalyzer.toggle_category(mock, true) mock.verify end
或者显式传递哈希形式的关键字参数:
mock.expect :update!, nil, [], {collapsed: true}
3. 兼容旧Ruby版本的写法(若需要)
如果你的Ruby版本是2.6及更早,关键字参数会被视为位置参数的哈希,此时需要把关键字参数放在位置参数数组中:
mock.expect :update!, nil, [{collapsed: true}]
修正后,mock就能正确匹配被测方法中update!(collapsed: collapsed)的调用,参数数量错误的问题即可解决。
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

