测试 Reducers

幸运的是,测试reducers很像测试我们的同步 action 创建者,因为所有reducer操作是同步的,这使我们的全局状态容易跟踪,同时也是为什么Redux的拥有众多粉丝的原因。

我们将在 angular2-redux-starter 中测试减速器:

  1. export default function counter(state = 0, action)
  2. switch (action.type) {
  3. case INCREMENT_COUNTER:
  4. return state + 1;
  5. case DECREMENT_COUNTER:
  6. return state - 1;
  7. default:
  8. return state;
  9. }
  10. }

正如你可以看到,有三种情况要测试:默认情况,增量和减量。我们想测试我们的 actions 触发的 reducer 状态变化符合预期。

  1. import { INCREMENT_COUNTER, DECREMENT_COUNTER } from '../actions/counter';
  2. import counter from './counter';
  3. describe('counter reducers', () => {
  4. it('should handle initial state', () => {
  5. expect(
  6. counter(undefined, {})
  7. )
  8. .toEqual(0)
  9. });
  10. it('should handle INCREMENT_COUNTER', () => {
  11. expect(
  12. counter(0, {
  13. type: INCREMENT_COUNTER
  14. })
  15. )
  16. .toEqual(1)
  17. });
  18. it('should handle DECREMENT_COUNTER', () => {
  19. expect(
  20. counter(1, {
  21. type: DECREMENT_COUNTER
  22. })
  23. )
  24. .toEqual(0)
  25. });
  26. });

注意,我们只是测试Redux状态的一部分,减速器负责Counter,而不是整体。从这些测试中我们可以看出,Redux主要基于纯函数。