PageRenderTime 56ms CodeModel.GetById 31ms RepoModel.GetById 0ms app.codeStats 0ms

/test/unit/socket.test.js

https://github.com/taoyuan/musher.js
JavaScript | 143 lines | 77 code | 18 blank | 48 comment | 0 complexity | d4b338f7142ad89321d57d1028cac037 MD5 | raw file
  1. var s = require('../support');
  2. var t = s.t;
  3. describe('socket', function () {
  4. var server;
  5. before(function (done) {
  6. s.start(function (err, _server) {
  7. server = _server;
  8. done();
  9. });
  10. });
  11. after(function () {
  12. server.close();
  13. });
  14. describe('basic', function () {
  15. var socket;
  16. beforeEach(function () {
  17. socket = s.connect('test_key');
  18. });
  19. afterEach(function (done) {
  20. socket.close(done);
  21. });
  22. it('should initiate socket', function () {
  23. t.ok(socket);
  24. t.ok(socket.adapter);
  25. });
  26. it('should publish with socket', function (done) {
  27. var data = {boo: 'foo'};
  28. var channel = socket.subscribe('tom');
  29. channel.on('data', function (message) {
  30. t.deepEqual(data, message);
  31. done();
  32. });
  33. socket.publish('tom', 'data', data);
  34. });
  35. it('should publish with channel', function (done) {
  36. var data = {boo: 'foo'};
  37. var channel = socket.subscribe('tom');
  38. channel.on('data', function (message) {
  39. t.deepEqual(data, message);
  40. done();
  41. });
  42. channel.publish('data', data);
  43. });
  44. it('should not received data when unsubscribe', function (done) {
  45. var data = {boo: 'foo'};
  46. var channel = socket.subscribe('tom');
  47. channel.on('data', function (message) {
  48. t.deepEqual(data, message);
  49. channel.unsubscribe(function () {
  50. socket.publish('tom', 'data', data);
  51. setTimeout(done, 200);
  52. });
  53. });
  54. socket.publish('tom', 'data', data);
  55. });
  56. it('should sub and pub with different socket', function (done) {
  57. var socketPub = s.connect('test_key');
  58. var data = {boo: 'foo'};
  59. var channel = socket.subscribe('tom');
  60. channel.on('data', function (message) {
  61. t.deepEqual(data, message);
  62. done();
  63. });
  64. socketPub.publish('tom', 'data', data);
  65. });
  66. it('should work with $ topic', function (done) {
  67. var data = {boo: 'foo'};
  68. var channel = socket.subscribe('$tom');
  69. channel.on('data', function (message) {
  70. t.deepEqual(data, message);
  71. done();
  72. });
  73. socket.publish('$tom', 'data', data);
  74. });
  75. it('should work with char wild char', function (done) {
  76. var data = {boo: 'foo'};
  77. var channel = socket.subscribe('foo/*');
  78. channel.on('data', function (message) {
  79. t.deepEqual(data, message);
  80. done();
  81. });
  82. socket.publish('foo/bar', 'data', data);
  83. });
  84. it('should work with params', function (done) {
  85. var data = {boo: 'foo'};
  86. var channel = socket.subscribe('foo/:bar');
  87. channel.on('data', function (message, route) {
  88. t.deepEqual(data, message);
  89. t.equal(route.params.bar, 'bar');
  90. done();
  91. });
  92. socket.publish('foo/bar', 'data', data);
  93. });
  94. });
  95. describe('without key', function () {
  96. it('should work', function (done) {
  97. var socket = s.connect();
  98. var data = {boo: 'foo'};
  99. var channel = socket.subscribe('tom');
  100. channel.on('data', function (message) {
  101. t.deepEqual(data, message);
  102. done();
  103. });
  104. socket.publish('tom', 'data', data);
  105. });
  106. });
  107. describe('subscribe on connected', function () {
  108. it('should subscribe immediately', function (done) {
  109. var socket = s.connect('test_key');
  110. socket.on('connected', function () {
  111. var data = {boo: 'foo'};
  112. var channel = socket.subscribe('tom');
  113. channel.on('data', function (message) {
  114. t.deepEqual(data, message);
  115. done();
  116. });
  117. socket.publish('tom', 'data', data);
  118. });
  119. })
  120. });
  121. });