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

Rspec如何测试未确认邮箱用户的邮件返回ActionMailer::Base::NullMail

问题原因

Rails的ActionMailer邮件方法默认不会直接返回你定义的邮件实例,而是返回一层ActionMailer::MessageDelivery代理对象,你代码里返回的NullMail实例是被包裹在这个代理对象内部的,所以直接对方法返回值做类型判断会失败。

修复方案

只需要调用MessageDelivery实例的message方法,即可取出内部实际的邮件实例,修改测试代码如下:

expect(TestMailer.test_mail(expired_account).message).to be_an_instance_of(ActionMailer::Base::NullMail)

如果你的场景需要先触发投递逻辑再判断,也可以用下面的写法,效果一致:

mail = TestMailer.test_mail(expired_account).deliver_now
expect(mail).to be_an_instance_of(ActionMailer::Base::NullMail)

补充说明

NullMail实例本身会被Rails邮件体系识别为不需要投递的邮件,即使调用deliver_now也不会真的发送邮件,符合你“邮箱未确认就不发送邮件”的业务需求。

内容的提问来源于stack exchange,提问作者Linda Kadz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:24:01