UNPKG

@hirez_io/auto-spies-core

Version:

Create automatic spies from classes in tests, also for promises and observables, used as a common code for jasmine-auto-spies and jest-auto-spies

154 lines (133 loc) 4.34 kB
import { observable, Observable, ReplaySubject } from 'rxjs'; import { createObservableWithValues } from './create-observable-with-values'; import { SubscriberSpy, subscribeSpyTo } from '@hirez_io/observer-spy'; describe('createObservableWithValues', () => { let observableUnderTest: Observable<any>; let observerSpy: SubscriberSpy<any>; let errorIsExpected: boolean; Given(() => { errorIsExpected = false; }); When(() => { observerSpy = subscribeSpyTo(observableUnderTest, { expectErrors: errorIsExpected }); }); describe('GIVEN observable configured with 2 values', () => { Given(() => { observableUnderTest = createObservableWithValues([ { value: 'FAKE_VALUE1', }, { value: 'FAKE_VALUE2', }, ]); }); When(() => { observerSpy = subscribeSpyTo(observableUnderTest); }); Then('should emit the values in the correct order', () => { expect(observerSpy.getValues()).toEqual(['FAKE_VALUE1', 'FAKE_VALUE2']); }); }); describe('GIVEN observable configured with a value and complete', () => { Given(() => { observableUnderTest = createObservableWithValues([ { value: 'FAKE_VALUE1', }, { complete: true }, ]); }); Then('should emit the value and complete', () => { expect(observerSpy.getValues()).toEqual(['FAKE_VALUE1']); expect(observerSpy.receivedComplete()).toBeTruthy(); }); }); describe('GIVEN observable configured with a value and complete set to false', () => { Given(() => { observableUnderTest = createObservableWithValues([ { value: 'FAKE_VALUE1', }, { complete: false }, ]); }); Then('should emit the value but not complete', () => { expect(observerSpy.getValues()).toEqual(['FAKE_VALUE1']); expect(observerSpy.receivedComplete()).toBeFalsy(); }); }); describe('GIVEN observable configured with a delayed value, normal value and a delayed complete', () => { Given(() => { observableUnderTest = createObservableWithValues([ { value: 'FAKE_VALUE1', delay: 1, }, { value: 'FAKE_VALUE2', }, { complete: true, delay: 1 }, ]); }); Then('should emit the value and complete', async () => { await observerSpy.onComplete(); expect(observerSpy.getValues()).toEqual(['FAKE_VALUE1', 'FAKE_VALUE2']); expect(observerSpy.receivedComplete()).toBeTruthy(); }); }); describe('GIVEN observable configured with a value and an error', () => { Given(() => { errorIsExpected = true; observableUnderTest = createObservableWithValues([ { value: 'FAKE_VALUE1', }, { errorValue: 'FAKE_ERROR' }, ]); }); Then('should emit the value and the error', () => { expect(observerSpy.getValues()).toEqual(['FAKE_VALUE1']); expect(observerSpy.getError()).toEqual('FAKE_ERROR'); }); }); describe('GIVEN observable configured with a value and an error with a delay', () => { Given(() => { errorIsExpected = true; observableUnderTest = createObservableWithValues([ { value: 'FAKE_VALUE1', }, { errorValue: 'FAKE_ERROR', delay: 1 }, ]); }); Then('should emit the value and the delayed error ', async () => { await observerSpy.onError(); expect(observerSpy.getValues()).toEqual(['FAKE_VALUE1']); expect(observerSpy.getError()).toEqual('FAKE_ERROR'); }); }); describe('GIVEN observable configured with a value and to return the subject', () => { let controllerSubject: ReplaySubject<any>; Given(() => { errorIsExpected = true; const { values$, subject } = createObservableWithValues( [ { value: 'FAKE_VALUE1', }, ], { returnSubject: true } ); observableUnderTest = values$; controllerSubject = subject; }); When(() => { controllerSubject.next('FAKE_VALUE2'); controllerSubject.complete(); }); Then('should emit the value and the delayed error ', async () => { expect(observerSpy.getValues()).toEqual(['FAKE_VALUE1', 'FAKE_VALUE2']); }); }); });