1

这是我想测试期望的电话:

UserMailer.invoice_paid(user, invoice).deliver_later

Rails 5 ActionMailer:test模式下的行为似乎在 ApplicationMailer 类的每个方法上都返回 nil。这应该没问题,因为我可以像这样存根它:

invoice_paid_dbl = double(ActionMailer::MessageDelivery)
allow(UserMailer).to receive(:invoice_paid).and_return(invoice_paid_dbl)

这个期望失败了:

expect(UserMailer).to receive(:invoice_paid).once

虽然这个通过:

expect(invoice_paid_dbl).to receive(:deliver_later).once

这不应该是不可能的吗?我想也许方法链混淆了 RSpec,但是将行拆分成这个没有效果:

mail = UserMailer.invoice_paid(user, invoice)
mail.deliver_later

添加.with(any_args)到存根和期望也没有效果(因为这是默认设置)。预期失败:1 次,带有任何参数,收到:0 次,带有任何参数。

4

2 回答 2

0

我会留下这个问题,以防它帮助别人,但这实际上是一个愚蠢的错误的结果。我expect(UserMailer).to receive(:invoice_paid)早些时候在it街区,它正在过去。这是失败的那种类型的第二个期望。哎呀。

于 2018-02-04T04:35:30.223 回答
0

不了解您如何使用存根方法,但认为以下内容对您有用

您正在尝试存根方法链,因此需要使用stub_chain而不是stub

UserMailer.stub_chain(:invoice_paid, :deliver_later).and_return(:invoice_paid_dbl)

我希望这将有效并解决您的问题。有关更多详细信息,请查看文档

于 2018-02-04T02:40:19.840 回答