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测试)。请注意如何使用这个简短的符号制作热和冷 Observable cold('--1--2--3--|'),然后与来自 TestScheduler'--x--y--z--|'的预期使用进行比较。expectObservable

如果您还想使用短符号cold(...),hot(...)和其他符号,您需要获取源代码,编译它,npm run build_test然后使用与mocha原始相同的选项。请参阅package.jsonmochaindefault.opts的默认选项。我现在不知道有任何更简单的解决方案。

简短的符号只是使事情变得更容易和更具可读性,但实际上您并不需要它。您已经可以使用常规测试 Observables (和) TestScheduler,因为它们是标准包的一部分。https://github.com/ReactiveX/rxjs/tree/master/src/testing ( )ColdObservableHotObservablerxjsnode_modules/rxjs/testing

另请参阅:如何在 Angualr2 / Typescript 中调试 Observable 值?

于 2016-11-07T11:54:39.190 回答