@hirez_io/observer-spy
Version:
A simple little class that helps making Observable testing a breeze
69 lines (56 loc) • 1.84 kB
text/typescript
import { ObserverSpy } from './observer-spy';
import { Observable, of } from 'rxjs';
import { delay } from 'rxjs/operators';
import { fakeTime } from './fake-time';
describe('fakeTime', () => {
function getDelayedObservable() {
const VALUES = ['first', 'second', 'third'];
const observerSpy: ObserverSpy<string> = new ObserverSpy();
const delayedObservable: Observable<string> = of(...VALUES).pipe(delay(20000));
return {
VALUES,
observerSpy,
delayedObservable,
};
}
it('should fail with no parameters', () => {
function fakeTimeWithNoParams() {
fakeTime(() => {});
}
expect(fakeTimeWithNoParams).toThrowErrorMatchingSnapshot();
});
it(
'should handle delays with a virtual scheduler',
fakeTime((flush) => {
const { observerSpy, delayedObservable, VALUES } = getDelayedObservable();
const sub = delayedObservable.subscribe(observerSpy);
flush();
sub.unsubscribe();
expect(observerSpy.getValues()).toEqual(VALUES);
})
);
it(
'should handle be able to deal with done functionality as well',
fakeTime((flush, done) => {
const { observerSpy, delayedObservable, VALUES } = getDelayedObservable();
const sub = delayedObservable.subscribe(observerSpy);
flush();
sub.unsubscribe();
observerSpy.onComplete(() => {
expect(observerSpy.getValues()).toEqual(VALUES);
done();
});
})
);
it(
'should support async await functionality',
fakeTime(async (flush) => {
const { observerSpy, delayedObservable, VALUES } = getDelayedObservable();
const sub = delayedObservable.subscribe(observerSpy);
flush();
sub.unsubscribe();
await observerSpy.onComplete();
expect(observerSpy.getValues()).toEqual(VALUES);
})
);
});