如何执行两个reducer来更新状态

时间:2019-02-19 14:24:59

标签: javascript redux react-redux jestjs

我需要执行reducer才能更改state。我需要这个更新后的state才能使第二个reducer正常工作。它依赖于状态中所做的更改。但是,我不确定如何首先在测试中更新state,然后在其上运行第二个reducer

it('returns the correct sate', () => {
    const firstAction = {
        type: FOO,
        ...
    };

    const secondAction = {
        type: BAR,
        ...
    }

    reducer(undefined, firstAction); // <- Execute the first action
    expect(reducer(undefined, secondAction)) // <- throws an error because the values secondAction relies on are not there
        .toEqual(initialState
            ....);
});

那没有按预期工作。 reducer(undefined, firstAction);未更新状态,并且reducer(undefined, secondAction)引发错误,因为它依赖于update状态的值不存在。

如何在测试环境中使用操作更新状态,然后在此更新的reducer上执行第二个操作?

1 个答案:

答案 0 :(得分:0)

reducer是纯函数,它们采用stateaction并返回下一个state。您给出的示例期望状态在第一次reducer调用之后发生变化。但这是一个纯函数,它不会改变返回它的状态。如果第二个调用要求第一个操作产生第一个状态,则必须将其传递给减速器。

const stateAfterFirstAction = reducer(undefined, firstAction);
const stateAfterSecondAction = reducer(stateAfterFirstAction, secondAction);