NoMethodError:控制器测试中未定义的方法“assert_emails”

Aym*_*byk 7 testing ruby-on-rails ruby-on-rails-5

根据Rails 文档,该方法assert_emails允许转换语法:

assert_difference ->{ ActionMailer::Base.deliveries.size }, +1 do
  post :method_that_should_send_email
end
Run Code Online (Sandbox Code Playgroud)

assert_emails 1 do
  post :method_that_should_send_email
end
Run Code Online (Sandbox Code Playgroud)

我发现它好多了,因为我不必每次都复制粘贴长语法。

但是,在使用上述代码时,我的控制器测试中出现以下错误:

NoMethodError: undefined method `assert_emails'

我认为这是因为该方法仅在邮件程序测试中可用。

有没有办法让它也可用于控制器测试?默认情况下这不可用是否有充分的理由?有没有更好的方法来测试调用特定路由会导致发送电子邮件?

谢谢。

小智 9

尝试assert_emails在常规测试(不是ActionMailer::TestCase)中使用时,我刚刚遇到了同样的问题。

当我加入ActionMailer::TestHelper我的测试班时,助手们开始工作。

class FooTest < ActiveSupport::TestCase
  include ActionMailer::TestHelper

  test '...' do
    assert_no_emails do
      # ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我相信这也应该适用于您的控制器测试。