2016-11-07 3 views
2

Ich handle ein Mouseover-Ereignis mit Observable.fromEvent(), mit verschiedenen verketteten Operatoren. Wie würde ich das testen?So testen Sie RxJS-Ereignisse

export const bindMouseover = (link) => Observable.fromEvent(link, 'mouseover') 
    .filter(event => Nav.hasSubNav(event.target)) 
    .map(event => Nav.getSubNav(event.target)) 
    .filter(target => !Nav.elementIsVisible(target)) 
    .subscribe((target) => { 
     Nav.hideElements(subNavs); 
     Nav.showElement(target); 
    }); 

Antwort

0

Es gibt ein Kapitel ist auf RxJS Ketten in den RxJS 4 Dokumentation zu testen, aber die Grundsätze gelten für RxJS 5 auch: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/testing.md

Wenn Sie Komponententest RxJS benutzerdefinierte Betreiber oder Betreiber Ketten gibt es offizielle Dokumentation: https://github.com/ReactiveX/rxjs/blob/master/doc/writing-marble-tests.md (In diesem Dokument erfahren Sie jedoch nicht, wo Sie dort enthaltene Funktionen in Ihren eigenen Code importieren können).

Schauen Sie sich auch an, wie RxJS selbst getestet wird. Zum Beispiel testing map() operator (übrigens sind dies mocha Tests). Beachten Sie, wie heiße und kalte Observable mit dieser kurzen Notation cold('--1--2--3--|') gemacht und dann mit der erwarteten '--x--y--z--|' unter Verwendung expectObservable that comes from TestScheduler verglichen werden.

Wenn Sie wollte auch die Kurzschreibweise verwenden, um mit cold(...), hot(...) und andere müssten Sie den Quellcode packen, kompilieren es mit npm run build_test und verwenden dann die gleichen Optionen für mocha wie das Original. See package.json und die Standardoptionen für mocha in default.opts. Mir ist momentan keine einfachere Lösung bekannt.

Die kurze Notation macht die Dinge einfacher und lesbarer, aber Sie brauchen sie nicht. Sie können die regulären Test Observables (TestScheduler, ColdObservable und HotObservable) bereits verwenden, da sie Teil des Standard rxjs Pakets sind. siehe https://github.com/ReactiveX/rxjs/tree/master/src/testing (node_modules/rxjs/testing)

auch: How to debug Observable values in Angualr2/Typescript?

+0

Hey! Vielen Dank für Ihre Antwort! Ist es irgendwie möglich, dass rxjs von realen Element-Ereignissen funktioniert? ich meine. Ich werde einige Ereignisse im Element auslösen, und ich erwarte, dass RxJS Observable, das aus 'Observable.fromEvent' generiert wird, einige Daten aussendet. Ist es irgendwie möglich? –