2016-12-30 87 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編寫測試可能會更清晰。