2017-04-11 40 views
0

我有这样定义的默认初始状态的减速机:单元测试终极版减速器使用它自己的初始状态

const webReducer = (state = { 
    fetched: false, 
    data: {} 
}, action) => { 
    switch (action.type) { 
     case "FETCH_DATA": 
      state = { 
       ...state, 
       fetched: action.payload.fetched 
      }; 

      state.data.push(action.payload.data); 

      return state; 
     break; 
    } 

    return state; 
}; 

当我运行一个测试来检查初始状态,它传递:

const initialState = { 
    fetched: false, 
    data: {} 
}; 

it("Should have a default initial state",() => { 
    expect(webReducer(undefined, {})).toEqual(initialState); 
}) 

然而,当我尝试测试将数据添加到状态,它返回此错误:

TypeError: state.data.push is not a function

这就是我正在做的T est:

const object = { 
    fetched: true, 
    data: { 
     config: {size: 10} 
    } 
}; 

expect(
    webReducer(undefined, { 
     type: "FETCH_DATA", 
     payload: object 
    }) 
).toEqual(object); 

为什么我现在得到这个错误,如果之前我可以通过测试就好了?我也试图通过默认状态,就像这样:

expect(
    webReducer(initialState, { 
     type: "FETCH_DATA", 
     payload: object 
    }) 
).toEqual(object); 

但我发现了同样的错误。

回答

1

您已经将数据初始化为空对象,该对象没有推送功能。尝试用下面的替换它,测试应该通过。

state = { 
fetched: false, 
data: [] 
+0

不得不作出一些调整,以测试多个派遣,但我明白了!谢谢= D – celsomtrindade