单元测试减速器,测试每片减速器或组合减速器?

时间:2016-12-30 09:14:33

标签: unit-testing redux

假设我有一个reducer文件reducers / group1.js,就像这样

export default combineReducers({
  A: combineReducers({ A1, A2 }),
  B: reducerB,
  C: reducerC
})

测试每个切片减速机(A1,A2,reducerB和reducerC)和测试组合切片之间有什么区别吗?

import group1 from 'reducers/group1'

describe('reducers', () => {
  describe('group1', () => {
    it('should provide the initial state', () => {
      expect(group1(undefined, {})).to.equal({ group1: { A: { ... }, B: ... } })
    })

    it(...)

    // ...
  })
})

import { A1, A2, reducerB, reducerC } from 'reducers/group1'

describe('reducers', () => {
  describe('group1', () => {
    describe('A1', () => {
      it('should provide the initial state', () => {
        expect(A1(undefined, {})).to.equal(0) // if A1 is just a number
      })
    })
    describe('A2', () => { ... })
    describe('reducerB', () => { ... })
    describe('reducerC', () => { ... })
  })
})

1 个答案:

答案 0 :(得分:1)

你的第二个例子通常更好,因为它允许更简单的单元测试。我可以想象一个开发人员可能想要为reducer C编写一堆测试的情况,而不知道有关reducers AB的任何信息。第二个代码示例允许该开发人员编写一套C测试,而不关心AB甚至是什么。如果减速器的行为发生剧烈变化,它还可以帮助重写测试:所有这些测试都存在于一个地方,而不是分散在测试文件中。

但是,在某些情况下,您可能希望为整个reducer编写测试。例如,如果您有全局重置操作,则需要测试整个reducer是否正确响应该操作,而不是为每个reducer编写单独的测试。大多数情况下,为个别减速器编写测试可能会更清晰。