diff --git a/packages/rxjs/src/take-last.spec.ts b/packages/rxjs/src/take-last.spec.ts index b5c1403d8f..048f17bebd 100644 --- a/packages/rxjs/src/take-last.spec.ts +++ b/packages/rxjs/src/take-last.spec.ts @@ -24,6 +24,27 @@ describe('takeLast', () => { expect(subscriptions).toBe(0); }); + it('buffers every value for Infinity and emits them on completion', () => { + const events: Array = []; + const errors: unknown[] = []; + const source = new Observable((subscriber) => { + subscriber.next(1); + subscriber.next(2); + subscriber.next(3); + expect(events).toEqual([]); + subscriber.complete(); + }); + + source[takeLast](Infinity).subscribe({ + next: (value) => events.push(value), + error: (error) => errors.push(error), + complete: () => events.push('complete'), + }); + + expect(errors).toEqual([]); + expect(events).toEqual([1, 2, 3, 'complete']); + }); + it('exposes the extension through the exported Symbol only', () => { const source = new Observable(() => {}); type HasStringNamedTakeLast = Observable extends { takeLast: unknown } ? true : false; diff --git a/packages/rxjs/src/take-last.ts b/packages/rxjs/src/take-last.ts index ec8d699d1e..cce7d5ac06 100644 --- a/packages/rxjs/src/take-last.ts +++ b/packages/rxjs/src/take-last.ts @@ -16,7 +16,7 @@ Observable.prototype[takeLast] = function (this: Observable, amount = 1): return; } - let ring = new Array(amount); + let ring = amount === Infinity ? [] : new Array(amount); let counter = 0; subscriber.addTeardown(() => { ring = null!;