class ActionCable::Channel::TestCase
Суперкласс для функциональных тестов каналов 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.