gpt4 book ai didi

ruby-on-rails - 如何在 minitest 中模拟和验证 ActionCable 传输?

转载 作者:行者123 更新时间:2023-12-04 02:16:27 26 4
gpt4 key购买 nike

我正在使用带有 ActionCable 的 Ruby on Rails 5.1。我想使用 minitest 来测试特定方法,并模拟“ActionCable.server.broadcast”调用以验证我发送的数据是否正确

module MyModule
class Scanner

def trasmit
...
ActionCable.server.broadcast "my_channel", data: msg_data

但我不知道如何在我的 minitest 类中验证 ActionCable 广播正确的消息数据。

最佳答案

Rails ActionCable source已经经过充分测试以确保其正常工作,因此我们知道,如果我们只使用正确的参数调用 ActionCable,广播就可以工作。

如果你有一个 socket-heavy 的应用程序,我建议你试试 action-cable-testing它有很多帮助程序来验证 ActionCable 是否确实广播了一些东西。

您可以检查您的方法是否向特定 channel 广播 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

或者验证预期的数据是否已发送到 channel :
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

这个 Gem 可能很快就会成为 Rails 核心的一部分,所以它绝对值得一看,特别是如果你正在测试 ActionCable 的其他部分,这些部分迟早可能需要太多的工作来模拟。 (例如,使用特定用户登录)。

关于ruby-on-rails - 如何在 minitest 中模拟和验证 ActionCable 传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49944837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com