首页 手册 参考 源码 测试 关于中文版Repository
暗色主题亮色主题

spec-js/observables/defer-spec.js

  1. "use strict";
  2. var chai_1 = require('chai');
  3. var Rx = require('../../dist/cjs/Rx');
  4. var Observable = Rx.Observable;
  5. /** @test {defer} */
  6. describe('Observable.defer', function () {
  7. asDiagram('defer(() => Observable.of(a, b, c))')('should defer the creation of a simple Observable', function () {
  8. var expected = '-a--b--c--|';
  9. var e1 = Observable.defer(function () { return cold('-a--b--c--|'); });
  10. expectObservable(e1).toBe(expected);
  11. });
  12. it('should create an observable from the provided observable factory', function () {
  13. var source = hot('--a--b--c--|');
  14. var sourceSubs = '^ !';
  15. var expected = '--a--b--c--|';
  16. var e1 = Observable.defer(function () { return source; });
  17. expectObservable(e1).toBe(expected);
  18. expectSubscriptions(source.subscriptions).toBe(sourceSubs);
  19. });
  20. it('should create an observable from completed', function () {
  21. var source = hot('|');
  22. var sourceSubs = '(^!)';
  23. var expected = '|';
  24. var e1 = Observable.defer(function () { return source; });
  25. expectObservable(e1).toBe(expected);
  26. expectSubscriptions(source.subscriptions).toBe(sourceSubs);
  27. });
  28. it('should accept factory returns promise resolves', function (done) {
  29. var expected = 42;
  30. var e1 = Observable.defer(function () {
  31. return new Promise(function (resolve) { resolve(expected); });
  32. });
  33. e1.subscribe(function (x) {
  34. chai_1.expect(x).to.equal(expected);
  35. done();
  36. }, function (x) {
  37. done(new Error('should not be called'));
  38. });
  39. });
  40. it('should accept factory returns promise rejects', function (done) {
  41. var expected = 42;
  42. var e1 = Observable.defer(function () {
  43. return new Promise(function (resolve, reject) { reject(expected); });
  44. });
  45. e1.subscribe(function (x) {
  46. done(new Error('should not be called'));
  47. }, function (x) {
  48. chai_1.expect(x).to.equal(expected);
  49. done();
  50. }, function () {
  51. done(new Error('should not be called'));
  52. });
  53. });
  54. it('should create an observable from error', function () {
  55. var source = hot('#');
  56. var sourceSubs = '(^!)';
  57. var expected = '#';
  58. var e1 = Observable.defer(function () { return source; });
  59. expectObservable(e1).toBe(expected);
  60. expectSubscriptions(source.subscriptions).toBe(sourceSubs);
  61. });
  62. it('should create an observable when factory throws', function () {
  63. var e1 = Observable.defer(function () {
  64. throw 'error';
  65. });
  66. var expected = '#';
  67. expectObservable(e1).toBe(expected);
  68. });
  69. it('should allow unsubscribing early and explicitly', function () {
  70. var source = hot('--a--b--c--|');
  71. var sourceSubs = '^ ! ';
  72. var expected = '--a--b- ';
  73. var unsub = ' ! ';
  74. var e1 = Observable.defer(function () { return source; });
  75. expectObservable(e1, unsub).toBe(expected);
  76. expectSubscriptions(source.subscriptions).toBe(sourceSubs);
  77. });
  78. it('should not break unsubscription chains when result is unsubscribed explicitly', function () {
  79. var source = hot('--a--b--c--|');
  80. var sourceSubs = '^ ! ';
  81. var expected = '--a--b- ';
  82. var unsub = ' ! ';
  83. var e1 = Observable.defer(function () { return source.mergeMap(function (x) { return Observable.of(x); }); })
  84. .mergeMap(function (x) { return Observable.of(x); });
  85. expectObservable(e1, unsub).toBe(expected);
  86. expectSubscriptions(source.subscriptions).toBe(sourceSubs);
  87. });
  88. });
  89. //# sourceMappingURL=defer-spec.js.map