2017-02-14 105 views
2

按照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'

我想这是因为该方法只适用于邮寄可用的测试。

有没有办法让控制器测试也可以使用它?有没有一个很好的理由为什么默认情况下不可用?有没有更好的方法来测试调用特定路线导致发送电子邮件?

谢谢。

回答

1

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

当我将ActionMailer::TestHelper包含到我的测试类中时,帮助者开始工作。

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

    test '...' do 
    assert_no_emails do 
     # ... 
    end 
    end 
end 

我相信应该在你的控制器测试中也可以工作。

相关问题