Skip to content

Commit

Permalink
Merge pull request #24935 from javan/actioncable-javascript-tests
Browse files Browse the repository at this point in the history
WIP: Action Cable JavaScript tests
  • Loading branch information
jeremy committed May 9, 2016
2 parents 2399cfe + 71d4066 commit 288c01f
Show file tree
Hide file tree
Showing 9 changed files with 4,631 additions and 0 deletions.
5 changes: 5 additions & 0 deletions actioncable/Rakefile
Expand Up @@ -25,6 +25,11 @@ namespace :test do
sh(Gem.ruby, '-w', '-Ilib:test', file)
end or raise "Failures"
end

task :javascript do
require 'blade'
Blade.start(interface: :runner)
end
end

namespace :assets do
Expand Down
2 changes: 2 additions & 0 deletions actioncable/actioncable.gemspec
Expand Up @@ -22,4 +22,6 @@ Gem::Specification.new do |s|

s.add_dependency 'nio4r', '~> 1.2'
s.add_dependency 'websocket-driver', '~> 0.6.1'

s.add_development_dependency 'blade', '~> 0.5.1'
end
7 changes: 7 additions & 0 deletions actioncable/blade.yml
@@ -0,0 +1,7 @@
load_paths:
- app/assets/javascripts
- test/javascript/src
- test/javascript/vendor

logical_paths:
- test.js
3 changes: 3 additions & 0 deletions actioncable/test/javascript/src/test.coffee
@@ -0,0 +1,3 @@
#= require action_cable
#= require_tree ./test_helpers
#= require_tree ./unit
5 changes: 5 additions & 0 deletions actioncable/test/javascript/src/test_helpers/index.coffee
@@ -0,0 +1,5 @@
#= require_self
#= require_tree .

ActionCable.TestHelpers =
testURL: "ws://cable.example.com/"
21 changes: 21 additions & 0 deletions actioncable/test/javascript/src/test_helpers/mock_websocket.coffee
@@ -0,0 +1,21 @@
#= 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
24 changes: 24 additions & 0 deletions actioncable/test/javascript/src/unit/action_cable_test.coffee
@@ -0,0 +1,24 @@
{module, test} = QUnit
{testURL} = ActionCable.TestHelpers

module "ActionCable", ->
module "#createConsumer", ->
test "uses specified URL", (assert) ->
consumer = ActionCable.createConsumer(testURL)
assert.equal consumer.url, testURL

test "uses default URL", (assert) ->
pattern = ///#{ActionCable.INTERNAL.default_mount_path}$///
consumer = ActionCable.createConsumer()
assert.ok pattern.test(consumer.url), "Expected #{consumer.url} to match #{pattern}"

test "uses URL from meta tag", (assert) ->
element = document.createElement("meta")
element.setAttribute("name", "action-cable-url")
element.setAttribute("content", testURL)

document.head.appendChild(element)
consumer = ActionCable.createConsumer()
document.head.removeChild(element)

assert.equal consumer.url, testURL
31 changes: 31 additions & 0 deletions actioncable/test/javascript/src/unit/consumer_test.coffee
@@ -0,0 +1,31 @@
{module, test} = QUnit
{testURL, createConsumer} = ActionCable.TestHelpers

module "ActionCable.Consumer", ->
test "#connect", (assert) ->
done = assert.async()

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()

0 comments on commit 288c01f

Please sign in to comment.