2017-02-14 118 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 

我相信應該在你的控制器測試中也可以工作。

相關問題