Dav*_*ave 11 ruby-on-rails mocking minitest ruby-on-rails-5 actioncable
我正在使用带有ActionCable的Ruby on Rails 5.1.我想使用minitest测试一个特定的方法,并模拟"ActionCable.server.broadcast"调用以验证我发送的数据是否正确
module MyModule
class Scanner
def trasmit
...
ActionCable.server.broadcast "my_channel", data: msg_data
Run Code Online (Sandbox Code Playgroud)
但我不知道在我的minitest类中我如何验证ActionCable如何广播正确的消息数据.
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
Run Code Online (Sandbox Code Playgroud)
或验证预期数据是否已发送到频道:
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
Run Code Online (Sandbox Code Playgroud)
这个Gem 可能很快就会成为Rails核心的一部分,所以它绝对值得一看,特别是如果你正在测试ActionCable的其他部分,它们迟早可能需要太多的工作来模拟.(例如,使用特定用户登录).