【问题标题】:How to compare two redux store states?如何比较两个 redux store 状态?
【发布时间】:2019-03-14 17:25:43
【问题描述】:

我正在为我的 reducer 编写测试,并希望比较调度前的状态和之后的状态 - 实际上是从状态后的状态“减去”之前的状态

describe('UpdateAccountData', () => {
    let store;

    describe('Customer', () => {
        beforeEach(() => {
            store = createStore(reducers, customerData, applyMiddleware(sagaMiddleware));
        });

        it('debug store', () => {
            console.log(store.getState());
        });

        it('dispatch change', () => {
            //need to deep copy old state here
            store.dispatch(updateStoredCustomerDetails({ email: 'blabla@blabla.com' }));
            console.log(store.getState());
            //need to substract old state from new state to check that only email has changed and nothing else
        });
    });

【问题讨论】:

标签: javascript redux react-redux jestjs immutable.js


【解决方案1】:

您可以像这样使用equals 方法:

oldStore.equals(newStore); //Returns boolean

【讨论】:

    【解决方案2】:

    我最终使用了深度对象差异库,这是我的示例 - 我正在测试两次出现除了电子邮件之外没有其他更改:

    import { updatedDiff, deletedDiff, addedDiff } from 'deep-object-diff';  
                   .....
    
            it('updates customer email', () => {
                const before = store.getState();
                store.dispatch(updateStoredCustomerDetails({ email: 'blabla@blabla.com' }));
                const after = store.getState();
                expect(addedDiff(before, after)).toEqual({});
                expect(deletedDiff(before, after)).toEqual({});
                expect(updatedDiff(before, after)).toEqual({
                    login: { loginToken: { email: 'blabla@blabla.com' } },
                    customer: { email: 'blabla@blabla.com' },
                });
            }); 
    

    【讨论】:

      猜你喜欢
      • 2016-09-29
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 2021-10-24
      相关资源
      最近更新 更多