我有一个具有默认初始状态的reducer,如下所示:
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不是函数
这就是我进行测试的方式:
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 );
但是我得到了同样的错误。
答案 0 :(得分:1)
您已将数据初始化为空对象,该对象上没有推送功能。尝试用下面的替换它,测试应该没问题。
state = {
fetched: false,
data: []