2016-11-07 4 views
2

Я обрабатываю событие mouseover, используя Observable.fromEvent(), с различными цепными операторами. Как я могу это сделать?Как протестировать события RxJS

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

ответ

0

Там в главе о тестировании RxJS цепей в RxJS 4 документации, но принципы применяются к 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. Например, testing map() operator (кстати, это тесты mocha). Обратите внимание на то, что с помощью этой короткой нотации cold('--1--2--3--|') сделаны горячие и холодные наблюдения, а затем сравниваются с ожидаемым '--x--y--z--|' с использованием expectObservable that comes from TestScheduler.

Если вы хотите использовать также сокращенную нотацию с cold(...), hot(...) и другими вы должны захватить исходный код, скомпилировать его с npm run build_test, а затем использовать те же параметры для mocha как оригинал. See package.json и значения по умолчанию для mocha in default.opts. Сейчас я не знаю о каком-либо простом решении.

Короткие обозначения просто упрощают и читают, но на самом деле это не нужно. Вы можете использовать регулярные тесты Observables (TestScheduler, ColdObservable и HotObservable) уже с тех пор, как они являются частью стандартного пакета rxjs. https://github.com/ReactiveX/rxjs/tree/master/src/testing (node_modules/rxjs/testing)

Также см: How to debug Observable values in Angualr2/Typescript?

+0

Эй! Спасибо за ваш ответ! Возможно ли каким-то образом сделать rxjs, работающим с реальными событиями элемента? Я имею в виду. Я вызову некоторые события в элементе, и я ожидаю, что наблюдаемый RxJS, сгенерированный из 'Observable.fromEvent', испустит некоторые данные. Возможно ли это как-то? –

Смежные вопросы