Question

I'm trying to write a test for my Message model. This model has a method 'send_message':

def send_message
   ContactMailer.contact_mail(self.name, self.email, self.text, self.ip).deliver
end

In my rspec file I have the following:

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

FactoryGirl.build(:message).send_message

I am receiving the following error:

 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

Any idea? Could it be because I'm not taking .deliver into account?

Was it helpful?

Solution

No, the issue is that you haven't told RSpec that ContactMailer should receive that message. The argument to double is just a way to "name" the double for documentation purposes, as discussed in https://github.com/rspec/rspec-mocks

You actually don't need a double in this case, as you can set the expectation directly on the ContactMailer class as follows:

ContactMailer.should_receive(:contact_mail)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top