@react-mvi/testing
Version:
Test module for React MVI.
44 lines (43 loc) • 1.27 kB
JavaScript
/**
* @fileoverview
* @author Taketoshi Aono
*/
import { Subject, Observable } from 'rxjs';
import { filter } from 'rxjs/operators';
export class Interrupter {
constructor(provisioning) {
this.provisioning = provisioning;
this.observable = new Subject();
this.provisioning.subscribe(state => {
this.observable.next(state);
});
}
toObservable({ disposeWhenUnsubscribe } = {
disposeWhenUnsubscribe: true,
}) {
return Observable.create(subscriber => {
const sub = this.observable.subscribe(v => subscriber.next(v));
return () => {
sub.unsubscribe();
if (disposeWhenUnsubscribe) {
this.provisioning.dispose();
}
};
});
}
send(type, payload = {}) {
this.provisioning.getSubject().notify({ type, payload });
}
subscribe(callback, runInitial = false) {
return this.provisioning.subscribe(callback, runInitial);
}
dispose() {
this.provisioning.dispose();
}
wait(type) {
return this.provisioning
.getSubject()
.observable.pipe(filter(args => args.type === type))
.toPromise();
}
}