3

Observable.fromEvent()を使用して、さまざまな連鎖演算子を使用してマウスオーバーイベントを処理しています。これを単体テストするにはどうすればよいですか?

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);
    });
4

1 に答える 1

0

RxJS 4 ドキュメントには RxJS チェーンのテストに関する章がありますが、原則は RxJS 5 にも適用されます: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/testing.md

RxJS カスタム オペレーターまたはオペレーター チェーンを単体テストする場合は、公式ドキュメントがあります: https://github.com/ReactiveX/rxjs/blob/master/doc/writing-marble-tests.md (ただし、このドキュメントではわかりませんそこにリストされている機能を独自のコードにインポートできます)。

また、RxJS 自体がどのようにテストされているかを見てください。たとえば、テストmap()オペレーター(ところで、これらはmochaテストです)。Hot Observable と Cold Observable がこの短い表記法でどのように作成され、 TestScheduler から来る予想されるusingcold('--1--2--3--|')と比較されるかに注意してください。'--x--y--z--|'expectObservable

などの短縮表記も使用したい場合はcold(...)hot(...)ソース コードを取得してコンパイルし、オリジナルnpm run build_testと同じオプションを使用する必要があります。およびinのデフォルト オプションを参照してください。今のところ、より簡単な解決策を知りません。mochapackage.jsonmochadefault.opts

短い記法は物事をより簡単に読みやすくするだけですが、実際には必要ありません。通常のテスト Observables ( TestSchedulerColdObservableおよび) は標準パッケージHotObservableの一部であるため、既に使用できます。https://github.com/ReactiveX/rxjs/tree/master/src/testing ( )rxjsnode_modules/rxjs/testing

参照: Angualr2 / Typescript で Observable 値をデバッグする方法は?

于 2016-11-07T11:54:39.190 に答える