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
相关产品推荐
相关产品推荐

