如何在rspec中正确测试Mail对象

时间:2015-06-25 12:40:23

标签: rspec

在我阅读rspec时,听起来好像做了......

expect_any_instance_of(Mail).to receive(:deliver)

...应该使rspec用它自己替换传递方法,以便实际调用传递方法。但在我的情况下,当我这样做时,我在测试中得到以下错误,这使我相信它仍然被调用。

 Failure/Error: task.send_email_alert('test', dummy)
     Errno::ECONNREFUSED:
       Connection refused - connect(2) for "localhost" port 25

这是我的方法

def send_email_alert(alert_body, alert)
  mail = Mail.new do
    from alert.send_emails_from
    to alert.email_address
    subject 'New job posted from ' + alert.job_board_name
    body alert_body
  end
  mail.deliver!
end

这是考验。

context 'send_email_alert' do
    it 'creates an email and calls the deliver method' do
      dummy = OpenStruct.new(send_emails_from: 'test@test.com', job_board_name: 'test', email_address: 'test@test.com')
      expect(Mail).to receive(:deliver).and_return(true)
      task.send_email_alert('test', dummy)
    end
end

1 个答案:

答案 0 :(得分:0)

您已经存根deliver,但您没有存根deliver!,这是您调用的方法。它们是不同的方法。