Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. import {ActionsObservable as Observable} from 'redux-observable'
  2. import {VirtualTimeScheduler} from 'rxjs/scheduler/VirtualTimeScheduler';
  3.  
  4. import 'rxjs/add/observable/empty';
  5. import 'rxjs/add/observable/interval';
  6. import 'rxjs/add/operator/delay';
  7. import 'rxjs/add/operator/concat';
  8. import 'rxjs/add/operator/reduce';
  9. import 'rxjs/add/operator/takeUntil';
  10. import 'rxjs/add/operator/switchMap';
  11. import 'rxjs/add/operator/toArray';
  12. import 'rxjs/add/operator/do';
  13.  
  14. const intervalSeconds = 60;
  15. let scheduler;
  16.  
  17. const intervalEpic = (action$) => {
  18. return Observable
  19. .interval(intervalSeconds * 1000, scheduler)
  20. .takeUntil(action$.reduce((v, action) => 0, 0))
  21. .switchMap(() => {
  22. return Observable.of({
  23. type: "SOME_ACTION"
  24. })
  25. });
  26. };
  27.  
  28. export function runObservableEpicTest(observable, epic, done, verify) {
  29. let mockStore = {
  30. getState() {
  31. return {};
  32. }
  33. };
  34. Observable
  35. .empty()
  36. .concat(epic(observable, mockStore))
  37. .toArray()
  38. .do((actions) => verify(actions))
  39. .subscribe({
  40. error: (err) => done.fail(err),
  41. complete: () => done()
  42. });
  43. }
  44.  
  45. describe('test with interval', () => {
  46.  
  47. beforeEach(() => {
  48. scheduler = new VirtualTimeScheduler();
  49. });
  50.  
  51. it('should allow testing of interval', (done) => {
  52. let observable = Observable
  53. .empty()
  54. .delay((intervalSeconds + 1) * 1000, scheduler);
  55. runObservableEpicTest(observable, intervalEpic, done, (actions) => {
  56. expect(actions).toEqual([
  57. { type: "SOME_ACTION" }
  58. ]);
  59. });
  60. scheduler.flush();
  61. });
  62. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement