Ответ 1
Rails Источник ActionCable уже достаточно хорошо протестирован для обеспечения его работоспособности, поэтому мы знаем, что работа в области широковещания работает, если мы просто вызываем ActionCable с правильными параметрами.
Если у вас есть приложение с поддержкой сокета, я рекомендую попробовать тестирование action-cable, в котором есть много помощника, чтобы убедиться, что ActionCable действительно что-то передает.
Вы можете проверить, транслирует ли ваш метод X раз в определенный канал:
class ScannerTest < ActionDispatch::IntegrationTest
include ActionCable::TestHelper
def test_my_broadcaster
channel_name = 'my_channel'
assert_broadcasts channel_name, 0
# run your method (e.g. trasmit)
assert_broadcasts channel_name, 1
end
end
Или убедитесь, что ожидаемые данные были отправлены на канал:
class ScannerTest < ActionDispatch::IntegrationTest
include ActionCable::TestHelper
def test_my_broadcaster
channel_name = 'my_channel'
expected_data = { :hello => "world" }
assert_broadcast_on(channel_name, data: expected_data) do
# run your trasmit method here which should call:
ActionCable.server.broadcast channel_name, data: expected_data
end
end
end
Этот драгоценный камень может быть частью ядра Rails в ближайшее время, поэтому он определенно стоит посмотреть, особенно если вы тестируете другие части ActionCable, которые рано или поздно могут быть слишком сложными для макета. (Например, войдите с определенным пользователем).