Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import {ActionsObservable as Observable} from 'redux-observable'
- import {VirtualTimeScheduler} from 'rxjs/scheduler/VirtualTimeScheduler';
- import 'rxjs/add/observable/empty';
- import 'rxjs/add/observable/interval';
- import 'rxjs/add/operator/delay';
- import 'rxjs/add/operator/concat';
- import 'rxjs/add/operator/reduce';
- import 'rxjs/add/operator/takeUntil';
- import 'rxjs/add/operator/switchMap';
- import 'rxjs/add/operator/toArray';
- import 'rxjs/add/operator/do';
- const intervalSeconds = 60;
- let scheduler;
- const intervalEpic = (action$) => {
- return Observable
- .interval(intervalSeconds * 1000, scheduler)
- .takeUntil(action$.reduce((v, action) => 0, 0))
- .switchMap(() => {
- return Observable.of({
- type: "SOME_ACTION"
- })
- });
- };
- export function runObservableEpicTest(observable, epic, done, verify) {
- let mockStore = {
- getState() {
- return {};
- }
- };
- Observable
- .empty()
- .concat(epic(observable, mockStore))
- .toArray()
- .do((actions) => verify(actions))
- .subscribe({
- error: (err) => done.fail(err),
- complete: () => done()
- });
- }
- describe('test with interval', () => {
- beforeEach(() => {
- scheduler = new VirtualTimeScheduler();
- });
- it('should allow testing of interval', (done) => {
- let observable = Observable
- .empty()
- .delay((intervalSeconds + 1) * 1000, scheduler);
- runObservableEpicTest(observable, intervalEpic, done, (actions) => {
- expect(actions).toEqual([
- { type: "SOME_ACTION" }
- ]);
- });
- scheduler.flush();
- });
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement