在 Rspec 中,如何测试 Mailer 引发错误?

In Rspec, how to test that a Mailer raises an error?

给定一个引发异常的简单 Rails 邮件程序,我如何编写一个 rspec 规范来确认引发了异常?

# status_mailer.rb
  ...
  def simple_message(addr, subject, msg_text)
    raise "Foo"
  end
  ...

#status_mailer_spec.rb
RSpec.describe StatusMailer, type: :mailer do

  describe "simple_message"  do
    it "always raises exception" do
      expect{
        StatusMailer.simple_message("a@example.com", "a subject", "a message")
      }.to raise_error("wtf")
    end
  end
end

给出结果:

expected Exception with "wtf" but nothing was raised

但是,很明显,每当调用 mailer 方法时,它确实会引发 "Foo"。

(为了解决这个问题,这是一个故意失败的规范,但我希望它报告 wrong error was raised,例如 'Foo' 而不是 pf 'wtf'。但它说没有出现错误。)

我正在使用 Rails 5.0.1 和 Rspec 3.5.4

在规范中添加deliver_now

StatusMailer.simple_message("a@example.com", "a subject", "a message").deliver_now