3.4 Writing Tests

优质
小牛编辑
125浏览
2023-12-01

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

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

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

import nock from 'nock';
import expect from 'expect';
import configureMockStore from 'redux-mock-store';
import { createEpicMiddleware } from 'redux-observable';
import { fetchUserEpic, fetchUser, FETCH_USER } from '../../redux/modules/user';

const epicMiddleware = createEpicMiddleware(fetchUserEpic);
const mockStore = configureMockStore([epicMiddleware]);

describe('fetchUserEpic', () => {
  let store;

  beforeEach(() => {
    store = mockStore();
  });

  afterEach(() => {
    nock.cleanAll();
    epicMiddleware.replaceEpic(fetchUserEpic);
  });

  it('produces the user model', () => {
    const payload = { id: 123 };
    nock('http://example.com/')
      .get('/api/users/123')
      .reply(200, payload);

    store.dispatch({ type: FETCH_USER });

    expect(store.getActions()).toEqual([
      { type: FETCH_USER },
      { type: FETCH_USER_FULFILLED, payload }
    ]);
  });
});

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