【问题标题】:mock function with return mock value in jest开玩笑地返回模拟值的模拟函数
【发布时间】:2021-07-20 01:31:58
【问题描述】:

我使用 react-redux 创建一个中间件,并想为它写一些测试。如何模拟从帮助函数 checkNumberHistory 的返回,以便我可以测试 if 阻塞的逻辑?

import {checkNumberHistory} from '@src/helper';

export const middlewareAction = (): AppThunk => {
  return async (dispatch, getState) => {
    const recordededNumber = getState()?.recordedNumber || 0;
    const strNumber = getState()?.strNumber || 0;
    const isNumberChanged = checkNumberHistory(recordededNumber, strNumber);

    if (isNumberChanged) {
      dispatch(setNumber(strNumber));
    }
  };
};

【问题讨论】:

  • 您能说明checkNumberHistory 的定义位置以及它是如何导入中间件的吗?
  • 更新它只是从另一个文件导出功能
  • 函数是确定性的吗?您绝对可以根据我的直觉模拟导入,尝试 not 模拟它,然后您的测试也测试该功能
  • 我不想测试那个功能。因为它是单元测试。我想隔离测试,checkNumberHistory 的逻辑已经在其他地方测试过
  • 是的,我个人会嘲笑状态对象

标签: javascript unit-testing testing jestjs typescript2.0


【解决方案1】:

您应该能够使用 jest.mock 模拟 checkNumberHistory 导入。下面显示了使用 actual 值进行其他命名导入和模拟checkNumberHistory

jest.mock('@src/helper', () => ({
  ...jest.requireActual('@src/helper'),
  checkNumberHistory: () => 'Some mocked return value',
}));

describe('middleware tests', () => {
  it('does something', () => {
    // test here
  });
});

正如我在评论中提到的,如果我不需要(即,如果它们是确定性的),我倾向于尽量不模拟辅助函数。

【讨论】:

    猜你喜欢
    • 2022-10-24
    • 2021-02-07
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多