Rematch/Reducers- 编写测试用例时出错

Rematch/Reducers- Error writing the test cases

我正在尝试使用 React 测试为我的 reducers.js 编写单元测试用例 Library.I 我遇到了一些我无法弄清楚的错误。有人可以帮助我了解我哪里出错了吗?

reducers.js-

const INITIAL_STATE = {
  userData: {},
};

const setUserData = (state, { key, value }) => ({ // {key: value}
  ...state,
  userData: {
    ...state.userData,
    [key]: value,
  },
});

reducers.test.js

import reducersDefault from './reducers';

const {
  setUserData,
} = reducersDefault.reducers;

describe('reducers', () => {
  it('setUserData', () => expect(setUserData({}, { key: { name: 'test' } })).toEqual({
    userData: { userData: { key: { name: 'test' } } },
  }));
});

使用上面的代码,我得到以下错误-

Expected value to equal:
      {"userData": {"userData": {"key": {"name": "test"}}}}
    Received:
      {"userData": {"undefined": undefined}}

试图找出我在这里做错了什么。非常感谢任何帮助。

您测试失败,因为您的函数无法正常工作。您不能将对象解构为 key/value - 您当前正在做的是提取您传递到那里的对象的 keyvalue 属性的值。

这里有一个更好的方法:

const setUserData = (state, data) => ({
  ...state,
  userData: {
    ...state.userData,
    ..data, // put every property inside data to userData
  },
});

LE:阅读您的评论后,我意识到您在测试中调用了错误的函数:

expect(setUserData({}, { key: 'name', value: 'test' })).toEqual({
    userData: { name: 'test' }
}));

这应该会如您所愿(无需更改 setUserData)。