我试图集成 Jest 和 Supertest 以在一些中间件上构建集成测试。
我动态生成了我的中间件函数,因为它们改变了路由,看起来像这样:
export function middleware1(param: paramType) {
return async (req: Request, res: Response, next: NextFunction) => {
...
};
}
在我的 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 声明中,它失败了。当我middlewareUtils.middleware1独立于 API 调用运行时,期望正确解析。为什么模拟不能正确解释函数调用?