Spec-Zone.ru › Ruby on Rails 8.1

class ActionCable::Channel::TestCase

Родительский класс:
ActiveSupport::TestCase
Подключенные модули:
ActionCable::Channel::TestCase::Behavior

Суперкласс для функциональных тестов каналов Action Cable.

Простой пример

Функциональные тесты пишутся следующим образом: 1. Сначала используется метод subscribe для имитации создания подписки. 2. Затем проверяется, соответствует ли текущее состояние ожидаемому. «Состоянием» может быть что угодно: отправленные сообщения, потоки, на которые выполнена подписка, и т. д.

Например:

class ChatChannelTest < ActionCable::Channel::TestCase
  def test_subscribed_with_room_number
    # Simulate a subscription creation
    subscribe room_number: 1

    # Asserts that the subscription was successfully created
    assert subscription.confirmed?

    # Asserts that the channel subscribes connection to a stream
    assert_has_stream "chat_1"

    # Asserts that the channel subscribes connection to a specific
    # stream created for a model
    assert_has_stream_for Room.find(1)
  end

  def test_does_not_stream_with_incorrect_room_number
    subscribe room_number: -1

    # Asserts that not streams was started
    assert_no_streams
  end

  def test_does_not_subscribe_without_room_number
    subscribe

    # Asserts that the subscription was rejected
    assert subscription.rejected?
  end
end

Также можно выполнять действия: def test_perform_speak subscribe room_number: 1

  perform :speak, message: "Hello, Rails!"

  assert_equal "Hello, Rails!", transmissions.last["text"]
end

Специальные методы

ActionCable::Channel::TestCase также автоматически предоставляет следующие методы экземпляра для использования в тестах:

connection

Объект ActionCable::Channel::ConnectionStub, представляющий текущее HTTP-соединение.

subscription

Экземпляр текущего канала, создаваемый при вызове subscribe.

transmissions

Список всех сообщений, переданных в канал.

Канал определяется автоматически

ActionCable::Channel::TestCase автоматически определяет тестируемый канал по имени класса теста. Если канал нельзя определить по имени класса теста, его можно задать явно с помощью tests.

class SpecialEdgeCaseChannelTest < ActionCable::Channel::TestCase
  tests SpecialChannel
end

Указание идентификаторов соединения

Чтобы задать значения идентификаторов, необходимо настроить соединение вручную. Для этого используйте:

stub_connection(user: users(:john))

Тестирование широковещательной рассылки

ActionCable::Channel::TestCase дополняет проверки ActionCable::TestHelper (например, assert_broadcasts), чтобы поддерживать широковещательную рассылку для моделей:

# in your channel
def speak(data)
  broadcast_to room, text: data["message"]
end

def test_speak
  subscribe room_id: rooms(:chat).id

  assert_broadcast_on(rooms(:chat), text: "Hello, Rails!") do
    perform :speak, message: "Hello, Rails!"
  end
end

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

Spec-Zone.ru

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