【问题标题】:Stubbing existing object's method in RSpec test在 RSpec 测试中存根现有对象的方法
【发布时间】:2014-08-14 14:03:17
【问题描述】:

我正在使用 Mandrill 发送电子邮件,我在 itinializer 中定义了 $m:

$m = Mandrill::API.new 'XmylongkeygoeshereTg'

我需要测试一个发送电子邮件的函数,所以我需要在现有对象上以某种方式存根 $m.messages.send 方法。我读到stub_chain 是实现这一目标的一种混乱方式,但即使这样也没有用。我尝试的另一种方法是使用allow($m.messages).to

 it "sends emails to a group" do
   # stub Mandril's email sending, so no actual emails will be sent.
   allow($m.messages).to receive(:send) { nil }
   expect(subject.my_sending_emails_method).to be_true
 end 

虽然没有错误,但也没有存根的影响 - 电子邮件仍在发送中。

请建议如何存根?

【问题讨论】:

    标签: object rspec stub chain defined


    【解决方案1】:

    可能有不止一个答案,但我发现有效的是:

    allow($m).to receive_message_chain(:messages, :send) { nil }
    

    【讨论】:

    • 你的方法很好,我有一个错误,所以它像$m.send
    猜你喜欢
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多