Spec-Zone.ru › Ruby on Rails 5.0

модуль ActionMailer::TestHelper

Включенные модули:
ActiveJob::TestHelper

Предоставляет вспомогательные методы для тестирования Action Mailer, включая assert_emails и assert_no_emails.

Публичные методы экземпляра

assert_emails(number) { || ... } Показать исходный код
# File actionmailer/lib/action_mailer/test_helper.rb, line 32
def assert_emails(number)
  if block_given?
    original_count = ActionMailer::Base.deliveries.size
    yield
    new_count = ActionMailer::Base.deliveries.size
    assert_equal number, new_count - original_count, "#{number} emails expected, but #{new_count - original_count} were sent"
  else
    assert_equal number, ActionMailer::Base.deliveries.size
  end
end

Проверяет, что количество отправленных писем соответствует заданному числу.

def test_emails
  assert_emails 0
  ContactMailer.welcome.deliver_now
  assert_emails 1
  ContactMailer.welcome.deliver_now
  assert_emails 2
end

Если передан блок, этот блок должен привести к отправке указанного количества писем.

def test_emails_again
  assert_emails 1 do
    ContactMailer.welcome.deliver_now
  end

  assert_emails 2 do
    ContactMailer.welcome.deliver_now
    ContactMailer.welcome.deliver_now
  end
end
assert_enqueued_emails(number, &block) Показать исходный код
# File actionmailer/lib/action_mailer/test_helper.rb, line 90
def assert_enqueued_emails(number, &block)
  assert_enqueued_jobs number, only: ActionMailer::DeliveryJob, &block
end

Проверяет, что количество писем, запущенных в очередь для последующей доставки, соответствует заданному числу.

def test_emails
  assert_enqueued_emails 0
  ContactMailer.welcome.deliver_later
  assert_enqueued_emails 1
  ContactMailer.welcome.deliver_later
  assert_enqueued_emails 2
end

Если передан блок, этот блок должен привести к отправке указанного количества писем в очередь.

def test_emails_again
  assert_enqueued_emails 1 do
    ContactMailer.welcome.deliver_later
  end

  assert_enqueued_emails 2 do
    ContactMailer.welcome.deliver_later
    ContactMailer.welcome.deliver_later
  end
end
assert_no_emails(&block) Показать исходный код
# File actionmailer/lib/action_mailer/test_helper.rb, line 62
def assert_no_emails(&block)
  assert_emails 0, &block
end

Проверяет, что письма не были отправлены.

def test_emails
  assert_no_emails
  ContactMailer.welcome.deliver_now
  assert_emails 1
end

Если передан блок, этот блок не должен привести к отправке каких-либо писем.

def test_emails_again
  assert_no_emails do
    # No emails should be sent from this block
  end
end

Примечание: Эта проверка просто сокращенно записывает:

assert_emails 0
assert_no_enqueued_emails(&block) Показать исходный код
# File actionmailer/lib/action_mailer/test_helper.rb, line 109
def assert_no_enqueued_emails(&block)
  assert_no_enqueued_jobs only: ActionMailer::DeliveryJob, &block
end

Проверяет, что письма не находятся в очереди для последующей доставки.

def test_no_emails
  assert_no_enqueued_emails
  ContactMailer.welcome.deliver_later
  assert_enqueued_emails 1
end

Если передан блок, он не должен привести к отправке писем в очередь.

def test_no_emails
  assert_no_enqueued_emails do
    # No emails should be enqueued from this block
  end
end

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API