存根上的RSpec期望失败

时间:2018-02-03 21:26:15

标签: ruby-on-rails rspec rspec3 ruby-on-rails-5.2

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

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次。

2 个答案:

答案 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,它正在通过。这是失败的第二种期望。糟糕。