在 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
给定一个引发异常的简单 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