Ruby on rails 如何为调用mailer的Model方法编写mock

Ruby on rails 如何为调用mailer的Model方法编写mock,ruby-on-rails,rspec,mailer,Ruby On Rails,Rspec,Mailer,我正在尝试为我的消息模型编写一个测试。此模型具有“发送消息”方法: def send_message ContactMailer.contact_mail(self.name, self.email, self.text, self.ip).deliver end 在我的rspec文件中,我有以下内容: mailer = double(ContactMailer) mailer.should_receive(:contact_mail) FactoryGirl.build(:messa

我正在尝试为我的消息模型编写一个测试。此模型具有“发送消息”方法:

def send_message
   ContactMailer.contact_mail(self.name, self.email, self.text, self.ip).deliver
end
在我的rspec文件中,我有以下内容:

mailer = double(ContactMailer)
mailer.should_receive(:contact_mail)

FactoryGirl.build(:message).send_message
我收到以下错误:

 Failure/Error: mailer.should_receive(:contact_mail)
   (Double ContactMailer).contact_mail(any args)
       expected: 1 time with any arguments
       received: 0 times with any arguments

有什么想法吗?可能是因为我没有考虑到
.deliver

不,问题是您没有告诉RSpec联系人应收到该消息。如中所述,
double
的参数只是为文档目的“命名”double的一种方法

在这种情况下,您实际上不需要双精度,因为您可以直接在
ContactMailer
类上设置期望值,如下所示:

ContactMailer.should_receive(:contact_mail)