开玩笑的嘲笑函数似乎是与被调用函数不同的实例

时间:2020-02-16 16:06:04

标签: javascript node.js unit-testing jestjs

我正在模拟一个在Express应用程序中用作中间件的函数。

middleware.ts

export function middleware1(param: paramType) {
  ...
}

在Jest测试中,在文件顶部,我这样模拟middleware1

jest.mock('../middleware_path', () => ({
    middleware1: jest.fn(
      _ => {
        return (req, res, next) => {
          return new Promise((resolve, reject) => {
            console.log('Hello World');
            resolve(next());
          });
        };    
    }),
}));

import * as middlewareUtils from 'middleware'
// This next line is necessary for TypeScript compilation
const mockedMiddlewareUtils = mocked(middlewareUtils);

当我通过使用supertest来调用我的API来调用此函数时,它一定会使用此模拟实现。它会打印问候世界和所有内容!但是,当我在expect(mockedMiddlewareUtils.middleware1).toHaveBeenCalled();语句中it时,它将失败。当我独立于API调用运行middlewareUtils.middleware1时,expect可以正确解析。

该模拟程序的功能显然可以正确传播,但是由于某种原因,似乎有2个不同的函数实例,其中1个是我的内部模拟程序正在监视,而1个则在外部使用。这与我最初导出函数的方式有关吗? Express如何使用它?任何其他输入将不胜感激。

0 个答案:

没有答案