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

Я считаю, что это должно работать и в тестах вашего контроллера.