• 测试 Reducers

    测试 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主要基于纯函数。