单元测试redux reducer使用它自己的初始状态

时间:2017-04-11 15:37:19

标签: unit-testing reactjs react-redux

我有一个具有默认初始状态的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 );

但是我得到了同样的错误。

1 个答案:

答案 0 :(得分:1)

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

state = {
fetched: false,
data: []