【发布时间】:2020-07-07 16:04:33
【问题描述】:
我试图集成 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 来调用这个函数时,它肯定会使用这个模拟实现。它打印你好世界和一切!但是,当我在我的 it 语句中 expect(mockedMiddlewareUtils.middleware1).toHaveBeenCalled(); 时,它失败了。当我独立于 API 调用运行 middlewareUtils.middleware1 时,期望正确解析。为什么 mock 不能正确解释函数调用?
【问题讨论】:
-
那不是中间件,是中间件工厂。
标签: javascript unit-testing jestjs supertest ts-jest