Object 存根现有对象';RSpec试验中的s法

Object 存根现有对象';RSpec试验中的s法,object,rspec,stub,chain,defined,Object,Rspec,Stub,Chain,Defined,我使用Mandrill发送电子邮件,我在itinializer中定义了$m: $m = Mandrill::API.new 'XmylongkeygoeshereTg' 我需要测试发送电子邮件的函数,因此我需要在现有对象上以某种方式存根$m.messages.send方法。我读到stub\u-chain是实现这一点的一种混乱的方法,但即使这样也不起作用。我尝试的另一种方法是使用allow($m.messages)。要像这样使用: it "sends emails to a group" do

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

$m = Mandrill::API.new 'XmylongkeygoeshereTg'
我需要测试发送电子邮件的函数,因此我需要在现有对象上以某种方式存根
$m.messages.send
方法。我读到
stub\u-chain
是实现这一点的一种混乱的方法,但即使这样也不起作用。我尝试的另一种方法是使用
allow($m.messages)。要像这样使用

 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 
虽然没有错误,也没有存根的影响-电子邮件仍在发送


请建议如何存根?

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

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

您的方法很好,我有一个错误,因此它的工作方式类似于
$m.send