index.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. var ready = require('../')
  2. , util = require('util')
  3. , should = require('should')
  4. ;
  5. function SomeClass() {
  6. this.property = 'value';
  7. }
  8. ready.mixin(SomeClass.prototype);
  9. SomeClass.prototype.method = function() {
  10. return 'method';
  11. };
  12. describe('inherits', function() {
  13. var someClass = new SomeClass();
  14. it('should have Ready properties', function() {
  15. someClass.should.have.property('ready');
  16. });
  17. var anotherClass = new SomeClass();
  18. it('should be separate from other instances', function() {
  19. anotherClass.ready(function() {});
  20. someClass.ready(function() {});
  21. someClass.ready(function() {});
  22. anotherClass.should.have.property('_readyCallbacks').with.length(1);
  23. someClass.should.have.property('_readyCallbacks').with.length(2);
  24. });
  25. it('should ready(obj) directly work', function () {
  26. var foo = {};
  27. should.not.exist(foo.ready);
  28. ready(foo);
  29. foo.ready.should.be.a('function');
  30. });
  31. });
  32. describe('ready', function() {
  33. var someClass = new SomeClass();
  34. it('should queue callbacks', function() {
  35. someClass.ready(function() {});
  36. someClass.should.have.property('_readyCallbacks').with.length(1);
  37. someClass.ready(function() {});
  38. someClass.should.have.property('_readyCallbacks').with.length(2);
  39. });
  40. it('should execute and dequeue callbacks', function(done) {
  41. someClass.should.have.property('_readyCallbacks').with.length(2);
  42. someClass.ready(function() {
  43. someClass.should.have.property('_readyCallbacks').with.length(0);
  44. done();
  45. });
  46. someClass.ready(true);
  47. });
  48. it('should immediatly call callback when already ready', function(done) {
  49. someClass.ready(function() {
  50. done();
  51. });
  52. });
  53. it('should not call when ready set to false', function(done) {
  54. someClass.ready(false);
  55. someClass.ready(function(done) {
  56. done('should not execute because it is not ready');
  57. });
  58. setTimeout(function() {
  59. done();
  60. }, 10);
  61. });
  62. });