Spec-Zone.ru › Ruby on Rails 8.1

module ActiveSupport::Testing::NotificationAssertions

Открытые методы экземпляра

assert_no_notifications (pattern = nil, &block) Показать исходный код
# File activesupport/lib/active_support/testing/notification_assertions.rb, line 66
def assert_no_notifications(pattern = nil, &block)
  notifications = capture_notifications(pattern, &block)
  error_message = if pattern
    "Expected no notifications for #{pattern} but found #{notifications.size}"
  else
    "Expected no notifications but found #{notifications.size}"
  end
  assert_empty(notifications, error_message)
end

Проверяет, что для заданного pattern не было отправлено ни одного уведомления.

Вы можете проверить, что уведомления не отправлялись, передав шаблон, который может быть строкой или регулярным выражением, и блок. Если во время выполнения блока не будет отправлено ни одного подходящего уведомления, проверка пройдёт.

assert_no_notifications("post.submitted") do
  post.destroy # => emits non-matching notification
end
assert_notification (pattern, payload = nil, &block) Показать исходный код
# File activesupport/lib/active_support/testing/notification_assertions.rb, line 28
def assert_notification(pattern, payload = nil, &block)
  notifications = capture_notifications(pattern, &block)
  assert_not_empty(notifications, "No #{pattern} notifications were found")

  return notifications.first if payload.nil?

  notification = notifications.find { |notification| notification.payload.slice(*payload.keys) == payload }
  assert_not_nil(notification, "No #{pattern} notification with payload #{payload} was found")

  notification
end

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

Вы можете проверить, что уведомление было отправлено, передав шаблон, который может быть строкой или регулярным выражением, необязательные данные и блок. Если во время выполнения блока будет отправлено подходящее уведомление, проверка пройдёт, и уведомление будет возвращено.

Обратите внимание, что данные сопоставляются по подмножеству: уведомление должно содержать как минимум указанные ключи и значения, но может содержать и дополнительные.

assert_notification("post.submitted", title: "Cool Post") do
  post.submit(title: "Cool Post", body: "Cool Body") # => emits matching notification
end

Используя возвращённое уведомление, вы можете выполнять более настраиваемые проверки.

notification = assert_notification("post.submitted", title: "Cool Post") do
  ActiveSupport::Notifications.instrument("post.submitted", title: "Cool Post", body: Body.new("Cool Body"))
end

assert_instance_of(Body, notification.payload[:body])
assert_notifications_count (pattern, count, &block) Показать исходный код
# File activesupport/lib/active_support/testing/notification_assertions.rb, line 51
def assert_notifications_count(pattern, count, &block)
  actual_count = capture_notifications(pattern, &block).count
  assert_equal(count, actual_count, "Expected #{count} instead of #{actual_count} notifications for #{pattern}")
end

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

Вы можете проверить количество отправленных уведомлений, передав шаблон, который может быть строкой или регулярным выражением, количество и блок. Во время выполнения блока будет подсчитано число отправленных подходящих уведомлений. После завершения блока проверка пройдёт, если количество совпадёт.

assert_notifications_count("post.submitted", 1) do
  post.submit(title: "Cool Post") # => emits matching notification
end
capture_notifications (pattern = nil, &block) Показать исходный код
# File activesupport/lib/active_support/testing/notification_assertions.rb, line 85
def capture_notifications(pattern = nil, &block)
  notifications = []
  ActiveSupport::Notifications.subscribed(->(n) { notifications << n }, pattern, &block)
  notifications
end

Перехватывает отправленные уведомления, при необходимости фильтруя их по pattern.

Вы можете перехватывать отправленные уведомления, при необходимости фильтруя их по шаблону, который может быть строкой или регулярным выражением, и блоку.

notifications = capture_notifications("post.submitted") do
  post.submit(title: "Cool Post") # => emits matching notification
end

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

Spec-Zone.ru

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