Writing Tests

测试异步代码不是很容易的事情。我们仍然在学习测试 Epics 最好的方式。如果你有完美的方案,请分享!

如果你对常规 Redux 还没有进行过测试。你需要首先转向它们的文档,因为几乎所有都是
适用的。

一种方式是 mock 完整的 Redux store 并且在每个测试用例中替换根 Epic。

  1. import nock from 'nock';
  2. import expect from 'expect';
  3. import configureMockStore from 'redux-mock-store';
  4. import { createEpicMiddleware } from 'redux-observable';
  5. import { fetchUserEpic, fetchUser, FETCH_USER } from '../../redux/modules/user';
  6. const epicMiddleware = createEpicMiddleware(fetchUserEpic);
  7. const mockStore = configureMockStore([epicMiddleware]);
  8. describe('fetchUserEpic', () => {
  9. let store;
  10. beforeEach(() => {
  11. store = mockStore();
  12. });
  13. afterEach(() => {
  14. nock.cleanAll();
  15. epicMiddleware.replaceEpic(fetchUserEpic);
  16. });
  17. it('produces the user model', () => {
  18. const payload = { id: 123 };
  19. nock('http://example.com/')
  20. .get('/api/users/123')
  21. .reply(200, payload);
  22. store.dispatch({ type: FETCH_USER });
  23. expect(store.getActions()).toEqual([
  24. { type: FETCH_USER },
  25. { type: FETCH_USER_FULFILLED, payload }
  26. ]);
  27. });
  28. });

如果你是一个特别的冒险者,我们已经试验性的使用RxJS’s TestSchedulermarble diagram helpers
老实讲,我们现在还不太建议这种方式,但是我们喜欢看到反馈或者某些人可以感兴趣帮助铺路。