在RSpec测试中存根现有对象的方法

时间:2014-08-14 14:03:18

标签: object rspec stub chain defined

我使用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 

虽然没有错误,但也没有留言效果 - 电子邮件仍在发送。

请建议如何存根?

1 个答案:

答案 0 :(得分:1)

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

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