【问题标题】:Using `new` on a mocked function with Jest在带有 Jest 的模拟函数上使用`new`
【发布时间】:2017-07-20 00:49:25
【问题描述】:

我试图在对模拟函数使用new 时模拟返回值:

const myMock = jest.fn();
myMock.mockReturnValueOnce('some_string');
const result = new myMock();

问题是new myMock()返回{}(一个空对象)而不是我指定的返回值。

我查看了文档,但找不到要使用的其他功能。与 new 一起使用时,我可以使用其他函数来生成结果吗?

【问题讨论】:

    标签: javascript unit-testing mocking jestjs


    【解决方案1】:

    似乎没有任何方法可以直接使用 Jest API 模拟 new myMock() 的结果。

    相反,我最终将它包装在一个函数中并传递它的参数。我还必须确保结果值是一个对象(这是 JavaScript 的东西)。

    结果是这样的:

    const mockedValue = { d: 'DUMMY' };
    const mock = jest.fn().mockReturnValueOnce(mockedValue);
    const myMock = (a, b) => mock(a, b); // a, b are parameters. Use more or less as needed
    const result = new myMock(); // { d: 'DUMMY' }
    

    包装函数只是一个普通函数,但是当使用new 调用它时,我可以将mock 的结果作为新值返回。我传递了用于确保 .toBeCalledWith() 的检查按预期工作的参数。

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 2023-03-26
      • 1970-01-01
      • 2019-07-22
      • 2018-09-14
      相关资源
      最近更新 更多