我在ActionCable中使用Rails 5.1。我想使用minitest来测试一个特定的方法,并模拟"ActionCable.server.broadcast“调用来验证我正在发送正确的数据
module MyModule
class Scanner
def trasmit
...
ActionCable.server.broadcast "my_channel", data: msg_data但我不知道如何在我的最弱类中验证ActionCable是否广播了正确的消息数据。
发布于 2018-04-24 15:37:06
Rails ActionCable源已经经过了足够好的测试,以确保其工作正常,所以我们知道,如果我们使用正确的参数调用ActionCable,广播就可以工作。
如果您有一个套接字很重的应用程序,我建议您尝试一下动作电缆试验,它有大量的助手来验证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这个Gem可能很快就会成为Rails核心的一部分,因此它肯定值得一看,特别是当您正在测试ActionCable的其他部分时,这迟早会有太多的工作要模拟。(例如,与特定用户登录)。
发布于 2018-04-23 15:14:18
我建议使用模拟(我使用摩卡咖啡 gem来嘲弄)来测试广播。下面是一个简单的例子:
channel_name = 'my_channel'
msg_data = 'hello'
broadcast = mock
server = mock
server.expects(:broadcast).with(channel_name, data: msg_data).returns(broadcast)
ActionCable.expects(:server).returns(server)通过这种方式,您可以模拟所有ActionCable.server调用,但是正在测试使用正确的参数调用它们。
https://stackoverflow.com/questions/49944837
复制相似问题