这是我想测试期望的电话:
UserMailer.invoice_paid(user, invoice).deliver_later
Rails 5 :test
模式下的ActionMailer行为似乎在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次。
答案 0 :(得分:0)
没有得到你如何使用存根方法,但认为以下方法适合你
您正在尝试存根方法链,因此需要使用stub_chain
代替stub
UserMailer.stub_chain(:invoice_paid, :deliver_later).and_return(:invoice_paid_dbl)
我希望这会起作用并解决你的问题。有关详细信息,请查看docs
答案 1 :(得分:0)
我会留下这个问题,以防它帮助别人,但这实际上是一个愚蠢错误的结果。我在expect(UserMailer).to receive(:invoice_paid)
区块之前有it
,它正在通过。这是失败的第二种期望。糟糕。