diff --git a/spec/subjects/async-subject-spec.js b/spec/subjects/async-subject-spec.js index a64d6d88af..e676114fca 100644 --- a/spec/subjects/async-subject-spec.js +++ b/spec/subjects/async-subject-spec.js @@ -27,6 +27,18 @@ describe('AsyncSubject', function () { expect(observer.results).toEqual([2, 'done']); }); + it('should emit the last value when subscribing after complete', function () { + var subject = new AsyncSubject(); + var observer = new TestObserver(); + + subject.next(1); + subject.next(2); + subject.complete(); + + subject.subscribe(observer); + expect(observer.results).toEqual([2, 'done']); + }); + it('should keep emitting the last value to subsequent subscriptions', function () { var subject = new AsyncSubject(); var observer = new TestObserver(); @@ -46,6 +58,40 @@ describe('AsyncSubject', function () { expect(observer.results).toEqual([2, 'done']); }); + it('should not emit values after complete', function () { + var subject = new AsyncSubject(); + var observer = new TestObserver(); + + subject.subscribe(observer); + + subject.next(1); + expect(observer.results).toEqual([]); + subject.next(2); + expect(observer.results).toEqual([]); + subject.complete(); + expect(observer.results).toEqual([2, 'done']); + subject.next(3); + expect(observer.results).toEqual([2, 'done']); + }); + + it('should not emit values if unsubscribed before complete', function () { + var subject = new AsyncSubject(); + var observer = new TestObserver(); + var subscription = subject.subscribe(observer); + + subject.next(1); + expect(observer.results).toEqual([]); + subject.next(2); + expect(observer.results).toEqual([]); + + subscription.unsubscribe(); + + subject.next(3); + expect(observer.results).toEqual([]); + subject.complete(); + expect(observer.results).toEqual([]); + }); + it('should just complete if no value has been nexted into it', function () { var subject = new AsyncSubject(); var observer = new TestObserver(); @@ -81,4 +127,22 @@ describe('AsyncSubject', function () { subject.error(new Error('bad')); expect(observer.results).toEqual([new Error('bad')]); }); + + it('should keep emitting error to subsequent subscriptions', function () { + var subject = new AsyncSubject(); + var observer = new TestObserver(); + var subscription = subject.subscribe(observer); + + subject.next(1); + expect(observer.results).toEqual([]); + + subject.error(new Error('bad')); + expect(observer.results).toEqual([new Error('bad')]); + + subject.unsubscribe(); + + observer.results = []; + subject.subscribe(observer); + expect(observer.results).toEqual([new Error('bad')]); + }); });