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

Rspec如何校验无返回值的send_sms方法内部生成的body内容?

Rspec 校验无返回值短信发送方法内部内容的方案

核心逻辑是不依赖方法返回值,直接监听最终发送短信的Message.send方法的入参来做校验,具体实现如下:

最简写法(推荐)

直接用RSpec内置的参数匹配器,一行即可完成监听+校验:

describe "validate_msm" do
  let!(:user) { FactoryGirl.create(:user) }
  it "生成的短信内容包含欢迎信息" do
    # 声明期望:Message.send会被调用,且第二个参数(短信内容)包含welcome字符串
    expect(Message).to receive(:send).with("909090990", include("welcome"))
    # 执行被测方法
    user.send_sms("909090990")
  end
end

复杂校验写法

如果需要对短信内容做更多自定义校验,可以用块接收参数后校验:

describe "validate_msm" do
  let!(:user) { FactoryGirl.create(:user) }
  it "生成的短信内容符合完整规则" do
    expect(Message).to receive(:send) do |contact, body|
      expect(contact).to eq("909090990")
      expect(body).to include("welcome")
      expect(body).to include(user.nickname) # 可以扩展更多自定义校验逻辑
    end
    user.send_sms("909090990")
  end
end

说明

  • 两种写法都会自动校验send_sms是否真的触发了短信发送逻辑,如果方法执行完Message.send没有被调用,用例会直接报错
  • 不需要修改原有的send_sms方法添加返回值,完全符合黑盒测试的要求

内容的提问来源于stack exchange,提问作者Bhim rav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:03