0

我正在尝试为我的 Message 模型编写测试。这个模型有一个方法'send_message':

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到?

4

1 回答 1

0

不,问题是您没有告诉 RSpecContactMailer应该收到该消息。如https://github.com/rspec/rspec-mocks中所述,参数 todouble只是一种出于文档目的“命名”双精度的方式

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

ContactMailer.should_receive(:contact_mail)
于 2013-09-29T17:01:41.470 回答