我正在模拟一个在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如何使用它?任何其他输入将不胜感激。