未验证 提交 8932c1b9 编写于 作者: J Jeremy Daer

Merge pull request #25170 from maclover7/add-configuration-cable

[Action Cable] Add `WebSocket` and `logger` configuration options
......@@ -4,6 +4,8 @@
@ActionCable =
INTERNAL: <%= ActionCable::INTERNAL.to_json %>
WebSocket: window.WebSocket
logger: window.console
createConsumer: (url) ->
url ?= @getConfig("url") ? @INTERNAL.default_mount_path
......@@ -33,4 +35,4 @@
log: (messages...) ->
if @debugging
messages.push(Date.now())
console.log("[ActionCable]", messages...)
@logger.log("[ActionCable]", messages...)
......@@ -27,7 +27,7 @@ class ActionCable.Connection
else
ActionCable.log("Opening WebSocket, current state is #{@getState()}, subprotocols: #{protocols}")
@uninstallEventHandlers() if @webSocket?
@webSocket = new WebSocket(@consumer.url, protocols)
@webSocket = new ActionCable.WebSocket(@consumer.url, protocols)
@installEventHandlers()
@monitor.start()
true
......
#= require action_cable
#= require_tree ./test_helpers
#= require ./test_helpers
#= require_tree ./unit
#= require mock-socket
{TestHelpers} = ActionCable
TestHelpers.consumerTest = (name, options = {}, callback) ->
unless callback?
callback = options
options = {}
options.url ?= TestHelpers.testURL
QUnit.test name, (assert) ->
doneAsync = assert.async()
ActionCable.WebSocket = MockWebSocket
server = new MockServer options.url
consumer = ActionCable.createConsumer(options.url)
server.on "connection", ->
clients = server.clients()
assert.equal clients.length, 1
assert.equal clients[0].readyState, WebSocket.OPEN
done = ->
consumer.disconnect()
server.close()
doneAsync()
testData = {assert, consumer, server, done}
if options.connect is false
callback(testData)
else
server.on "connection", ->
testData.client = server.clients()[0]
callback(testData)
consumer.connect()
......@@ -3,3 +3,6 @@
ActionCable.TestHelpers =
testURL: "ws://cable.example.com/"
originalWebSocket = ActionCable.WebSocket
QUnit.testDone -> ActionCable.WebSocket = originalWebSocket
#= require mock-socket
NativeWebSocket = window.WebSocket
server = null
consumer = null
ActionCable.TestHelpers.createConsumer = (url, callback) ->
window.WebSocket = MockWebSocket
server = new MockServer url
consumer = ActionCable.createConsumer(url)
callback(consumer, server)
QUnit.testDone ->
if consumer?
consumer.disconnect()
if server?
server.clients().forEach (client) -> client.close()
server.close()
window.WebSocket = NativeWebSocket
......@@ -2,6 +2,23 @@
{testURL} = ActionCable.TestHelpers
module "ActionCable", ->
module "Adapters", ->
module "WebSocket", ->
test "default is window.WebSocket", (assert) ->
assert.equal ActionCable.WebSocket, window.WebSocket
test "configurable", (assert) ->
ActionCable.WebSocket = ""
assert.equal ActionCable.WebSocket, ""
module "logger", ->
test "default is window.console", (assert) ->
assert.equal ActionCable.logger, window.console
test "configurable", (assert) ->
ActionCable.logger = ""
assert.equal ActionCable.logger, ""
module "#createConsumer", ->
test "uses specified URL", (assert) ->
consumer = ActionCable.createConsumer(testURL)
......
{module, test} = QUnit
{testURL, createConsumer} = ActionCable.TestHelpers
{consumerTest} = ActionCable.TestHelpers
module "ActionCable.Consumer", ->
test "#connect", (assert) ->
done = assert.async()
consumerTest "#connect", connect: false, ({consumer, server, done}) ->
server.on("connection", done)
consumer.connect()
createConsumer testURL, (consumer, server) ->
server.on "connection", ->
clients = server.clients()
assert.equal clients.length, 1
assert.equal clients[0].readyState, WebSocket.OPEN
done()
consumer.connect()
test "#disconnect", (assert) ->
done = assert.async()
createConsumer testURL, (consumer, server) ->
server.on "connection", ->
clients = server.clients()
assert.equal clients.length, 1
clients[0].addEventListener "close", (event) ->
assert.equal event.type, "close"
done()
consumer.disconnect()
consumer.connect()
consumerTest "#disconnect", ({consumer, client, done}) ->
client.addEventListener("close", done)
consumer.disconnect()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册