#= 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 server.broadcastTo = (subscription, data = {}, callback) -> data.identifier = subscription.identifier if data.message_type data.type = ActionCable.INTERNAL.message_types[data.message_type] delete data.message_type server.send(JSON.stringify(data)) TestHelpers.defer(callback) 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()