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

使用RSpec模拟多次gets用户输入 解决Ruby TDD测试阻塞问题

问题原因

你的测试代码逻辑顺序错误,所有模拟输入的代码都放在了调用input_origin_addresses_manually?("y")之后,方法执行时mock规则还没生效,就会触发真实的终端输入等待。

修正后的测试代码

it 'If user wants to add their own addresses, check that they add more than 1 address' do
  # 先设置输出、输入的模拟规则
  expect(subject).to receive(:puts).with("Add at least 2 Addresses, hit enter after each address, type 'quit' when done")
  # 模拟用户依次输入两个有效地址、quit,gets默认返回的字符串带换行符,和真实输入场景保持一致
  allow($stdin).to receive(:gets).and_return(
    "0xa95aea385130718be87b380b419eeac8da40de55\n",
    "0xa95aea385130718be87b380b419eeac8da40de55\n",
    "quit\n"
  )

  # 所有mock规则设置完成后,再调用要测试的方法
  subject.input_origin_addresses_manually?("y")

  # 最后执行断言
  expect(subject.origin_addresses.length).to be > 1
end

额外注意事项

如果测试还是失败,请先确认你模拟的两个以太坊地址能通过check_ethereum_address_validity方法的校验,只有校验通过的地址才会被存入@origin_addresses数组。

内容的提问来源于stack exchange,提问作者sudo install

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:54:01