Javascript 如何在多个测试之间共享笑话模拟?

Javascript 如何在多个测试之间共享笑话模拟?,javascript,typescript,unit-testing,jestjs,Javascript,Typescript,Unit Testing,Jestjs,我有一个模拟版本的aws sdk,它在我的测试中运行良好: jest.mock(“aws sdk”,()=>{ 返回{ 凭据:jest.fn().mockImplementation(()=>({})), Config:jest.fn().mockImplementation(()=>({})), 配置:{ 更新:jest.fn(), }, S3:jest.fn().mockImplementation(()=>({ getSignedUrlPromise:awsGetSignedUrlMock

我有一个模拟版本的aws sdk,它在我的测试中运行良好:

jest.mock(“aws sdk”,()=>{
返回{
凭据:jest.fn().mockImplementation(()=>({})),
Config:jest.fn().mockImplementation(()=>({})),
配置:{
更新:jest.fn(),
},
S3:jest.fn().mockImplementation(()=>({
getSignedUrlPromise:awsGetSignedUrlMock,
})),
SQS:jest.fn().mockImplementation(()=>({})),
};
});
然而,我的许多测试都使用模拟AWS SDK,我不想不必要地重复模拟代码。但是,如果我将函数移动到一个单独的文件中并导入它,这将失败:

在我的
testSupport.ts
文件中:

export const mockAwsSdk=()=>{
返回{
凭据:jest.fn().mockImplementation(()=>({})),
Config:jest.fn().mockImplementation(()=>({})),
配置:{
更新:jest.fn(),
},
S3:jest.fn().mockImplementation(()=>({
getSignedUrlPromise:awsGetSignedUrlMock,
})),
SQS:jest.fn().mockImplementation(()=>({})),
};
};
在测试文件中:

jest.mock(“aws sdk”,mockAwsSdk);
这在以下情况下失败:

ReferenceError: Cannot access 'testSupport_1' before initialization
我已经尝试了各种解决方案,包括创建一个父函数,该函数接受
jest
实例,但我仍然无法实现这一点

如何在多个测试之间共享jest模拟?

jest有一个可用于指定字符串或正则表达式以匹配导入并用模拟文件替换的

或者,您可以添加mock,而无需在
moduleNameMapper
中指定它,通过该文件,mock应该与您需要模拟的文件位于同一目录中


如果它位于节点模块中,
\uuuuuuuuuuuuuuu mocks\uuuuu
文件夹应位于您的父目录中。

谢谢Varun!我修复了链接,所以它们不会读为“这里”,但这是完美的!