diff --git a/spec/util/UnsubscriptionError-spec.ts b/spec/util/UnsubscriptionError-spec.ts new file mode 100644 index 0000000000..67163c655a --- /dev/null +++ b/spec/util/UnsubscriptionError-spec.ts @@ -0,0 +1,28 @@ +import {expect} from 'chai'; +import * as Rx from '../../dist/cjs/Rx'; + +const { Observable, UnsubscriptionError } = Rx; + +/** @test {UnsubscriptionError} */ +describe('UnsubscriptionError', () => { + it('should create a message that is a clear indication of its internal errors', () => { + const err1 = new Error('Swiss cheese tastes amazing but smells like socks'); + const err2 = new Error('User too big to fit in tiny European elevator'); + const source1 = Observable.create(() => () => { throw err1; }); + const source2 = Observable.timer(1000); + const source3 = Observable.create(() => () => { throw err2; }); + const source = source1.merge(source2, source3); + + const subscription = source.subscribe(); + + try { + subscription.unsubscribe(); + } catch (err) { + expect(err instanceof UnsubscriptionError).to.equal(true); + expect(err.message).to.equal(`2 errors occurred during unsubscription: +1) ${err1} +2) ${err2}`); + expect(err.name).to.equal('UnsubscriptionError'); + } + }); +}); \ No newline at end of file diff --git a/src/util/UnsubscriptionError.ts b/src/util/UnsubscriptionError.ts index 61ddc281b1..aca1b7e4ca 100644 --- a/src/util/UnsubscriptionError.ts +++ b/src/util/UnsubscriptionError.ts @@ -4,7 +4,9 @@ */ export class UnsubscriptionError extends Error { constructor(public errors: any[]) { - super('unsubscriptoin error(s)'); + super(); this.name = 'UnsubscriptionError'; + this.message = errors ? `${errors.length} errors occurred during unsubscription: +${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\n')}` : ''; } } \ No newline at end of file