2016-12-30 216 views
0

假设我有一个减速器文件减速器/ 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

你的第二个例子通常更好,因为它允许简单的单元测试。我可以想象一个场景,开发人员可能想写一大堆减速器C的测试,但不知道减速器AB的任何内容。第二个代码示例允许该开发人员编写一套C测试,而不必关心甚么是AB。当重写测试时,如果Reducer的行为急剧变化,它也会有所帮助:所有这些测试都存在于一个地方,而不是遍布整个测试文件。

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