NoMethodError:在控制器测试未定义的方法`assert_emails'
问题描述:
按照Rails documentation,方法assert_emails
允许变换语法:NoMethodError:在控制器测试未定义的方法`assert_emails'
assert_difference ->{ ActionMailer::Base.deliveries.size }, +1 do
post :method_that_should_send_email
end
到
assert_emails 1 do
post :method_that_should_send_email
end
,我觉得好多了,因为我不必每次都复制粘贴冗长的语法。
不过,我得到以下错误在我的控制器使用的测试上面的代码时:
NoMethodError: undefined method `assert_emails'
我想这是因为该方法只适用于邮寄可用的测试。
有没有办法让控制器测试也可以使用它?有没有一个很好的理由为什么默认情况下不可用?有没有更好的方法来测试调用特定路线导致发送电子邮件?
谢谢。
答
我在尝试在常规测试中使用assert_emails
(而不是ActionMailer::TestCase
)时遇到了同样的问题。
当我将ActionMailer::TestHelper
包含到我的测试类中时,帮助者开始工作。
class FooTest < ActiveSupport::TestCase
include ActionMailer::TestHelper
test '...' do
assert_no_emails do
# ...
end
end
end
我相信应该在你的控制器测试中也可以工作。