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

Unit test redux reducer using it's own initial state

我有一个减速器,其默认初始状态定义如下:

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 );
})

但是,当我尝试测试向状态添加数据时,它 return 这个错误:

TypeError: state.data.push is not a function

这就是我进行测试的方式:

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 );

但我遇到了同样的错误。

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

state = {
fetched: false,
data: []