Javascript 在Express中执行的函数顺序与测试混乱

Javascript 在Express中执行的函数顺序与测试混乱,javascript,unit-testing,jestjs,supertest,ts-jest,Javascript,Unit Testing,Jestjs,Supertest,Ts Jest,我试图集成Jest和Supertest,在一些中间件上构建集成测试 我动态地生成了中间件函数,因为它们在不同的路由之间变化,结果如下所示: 导出函数middleware1(参数:paramType){ 返回异步(请求:请求,响应:响应,下一步:下一步功能)=>{ ... }; } 在我的玩笑测试中,在文件顶部,我模拟了middleware1,如下所示: jest.mock('../middleware\u path',()=>({ 米德尔瓦尔1:开玩笑( _ => { 返回(请求、恢复、下一步

我试图集成Jest和Supertest,在一些中间件上构建集成测试

我动态地生成了中间件函数,因为它们在不同的路由之间变化,结果如下所示:

导出函数middleware1(参数:paramType){
返回异步(请求:请求,响应:响应,下一步:下一步功能)=>{
...
};
}
在我的玩笑测试中,在文件顶部,我模拟了middleware1,如下所示:

jest.mock('../middleware\u path',()=>({
米德尔瓦尔1:开玩笑(
_ => {
返回(请求、恢复、下一步)=>{
返回新承诺((解决、拒绝)=>{
log('helloworld');
解析(next());
});
};
}),
}));
从“中间件”导入*作为中间件
//下一行是编译TypeScript所必需的
const mockedMiddlewareUtils=mocked(middlewareUtils);

当我使用supertest调用这个函数来访问我的API时,它肯定使用了这个模拟实现。它打印了hello world和所有东西!然而,当我
期望(mockedMiddlewareUtils.middleware1).tohavebeincall()时在我的it语句中,它失败了。当我独立于API调用运行
middlewareUtils.middleware1
时,expect正确解析。为什么mock不能正确解释函数调用?

事实证明,这是因为Express在应用程序创建时执行中间件生成函数,结果函数在整个应用程序中不断被调用。生成函数调用一次,其结果调用多次


您必须模拟中间件生成函数生成的函数(即
middleware1
)的结果,不是生成函数本身。

事实证明,这是因为Express在应用程序创建时执行中间件生成函数,结果函数在整个应用程序中不断调用。生成函数调用一次,其结果调用多次


您必须模拟中间件生成函数生成的函数(即,
middleware1
的结果),而不是生成函数本身。

这不是中间件,而是中间件工厂。这不是中间件,而是中间件工厂。