You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:33:18