【问题标题】:RSpec expectation on stub failsRSpec 对存根的期望失败
【发布时间】:2018-02-03 21:26:15
【问题描述】:

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

UserMailer.invoice_paid(user, invoice).deliver_later

:test 模式下的 Rails 5 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,但是将行拆分为 this 没有任何效果:

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

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

【问题讨论】:

  • 你是如何对方法进行存根的?

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


【解决方案1】:

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

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

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

我希望这将有效并解决您的问题。更多详情请查看docs

【讨论】:

  • allow(...).to_receive and_return(...) 行是一个存根方法。不幸的是,您的示例仍然不允许 expect(UserMailer).to receive(:invoice_paid) 通过,它已被弃用。
  • 那么请分享您的测试期望块
  • 在这里感谢您的帮助,但这只是一个愚蠢的错误。我已经在街区早些时候满足了这种期望。这是没有得到满足的那种类型的第二个期望。我的错!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2019-12-07
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多