我怎样才能让这个 assert_raise 断言通过?
How can I get this assert_raise assertion to pass?
我创建了一个自定义异常,当我达到 Amazon SES 的 SimpleEmailService 的最大发送速率时,我想引发该异常。关于 API 的任何信息都不需要知道,但这里是试图执行正在发生的事情的代码:
测试文件:
mailer_test.rb
it 'should not resend an email when ses limit has been reached' do
assert_raise Reverificaton::Process::SesMaxSendLimit do
Reverification::Process.expects(:ses_limit_reached?).returns(true)
end
AWS::SimpleEmailService.any_instance.expects(:send_email).never
Reverification::Mailer.resend_soft_bounced_notifications
end
这是我的代码文件:
process.rb
module Reverification
class Process
class SesMaxSendLimit < Exception; end
class << self
def send_email
raise SesMaxSendLimit if ses_limit_reached?
end
end
end
end
我收到的错误是没有引发异常
Reverification::Process::SesMaxSendLimit expected but nothing was raised.
为什么不引发异常?我已经将 ses_limit_reached?
模拟为 return true
并且我确信我的范围是正确的。有什么问题?
您需要在 assert_raise
块 中包含将触发该异常的代码 。我假设这是块之后的两个语句,所以(我认为)你应该有这个:
it 'should not resend an email when ses limit has been reached' do
assert_raise Reverificaton::Process::SesMaxSendLimit do
Reverification::Process.expects(:ses_limit_reached?).returns(true)
AWS::SimpleEmailService.any_instance.expects(:send_email).never
Reverification::Mailer.resend_soft_bounced_notifications
end
end
我创建了一个自定义异常,当我达到 Amazon SES 的 SimpleEmailService 的最大发送速率时,我想引发该异常。关于 API 的任何信息都不需要知道,但这里是试图执行正在发生的事情的代码:
测试文件:
mailer_test.rb
it 'should not resend an email when ses limit has been reached' do
assert_raise Reverificaton::Process::SesMaxSendLimit do
Reverification::Process.expects(:ses_limit_reached?).returns(true)
end
AWS::SimpleEmailService.any_instance.expects(:send_email).never
Reverification::Mailer.resend_soft_bounced_notifications
end
这是我的代码文件:
process.rb
module Reverification
class Process
class SesMaxSendLimit < Exception; end
class << self
def send_email
raise SesMaxSendLimit if ses_limit_reached?
end
end
end
end
我收到的错误是没有引发异常
Reverification::Process::SesMaxSendLimit expected but nothing was raised.
为什么不引发异常?我已经将 ses_limit_reached?
模拟为 return true
并且我确信我的范围是正确的。有什么问题?
您需要在 assert_raise
块 中包含将触发该异常的代码 。我假设这是块之后的两个语句,所以(我认为)你应该有这个:
it 'should not resend an email when ses limit has been reached' do
assert_raise Reverificaton::Process::SesMaxSendLimit do
Reverification::Process.expects(:ses_limit_reached?).returns(true)
AWS::SimpleEmailService.any_instance.expects(:send_email).never
Reverification::Mailer.resend_soft_bounced_notifications
end
end