使用Jest测试带Lambda Layer的AWS Lambda时的路径与语法错误排查
解决Lambda Layer路径映射与Jest ES模块语法错误问题
一、修复模块路径映射错误
Lambda运行时会将Layer挂载到/opt/nodejs,但本地测试环境不存在该路径,需在hoge1/src/jest.config.ts中配置路径映射,让Jest能定位到本地的db模块:
export default { // 保留原有其他配置 moduleNameMapper: { '^/opt/nodejs/dist/Db$': '<rootDir>/../../nodeLayer/db/dist/db/index.js' }, moduleFileExtensions: ['ts', 'js', 'json'] };
注:<rootDir>对应hoge1/src目录,路径需根据实际目录层级调整。
二、解决ES模块语法错误
出现Cannot use import statement outside a module,多是因为Jest默认处理CommonJS,但db模块编译后为ES模块,可按以下步骤调整:
1. 配置Jest转译规则
确保已安装ts-jest和@types/jest,然后在jest.config.ts中添加转译配置:
export default { // 保留原有其他配置 preset: 'ts-jest', transform: { '^.+\\.tsx?$': 'ts-jest' }, extensionsToTreatAsEsm: ['.ts'], moduleNameMapper: { '^/opt/nodejs/dist/Db$': '<rootDir>/../../nodeLayer/db/dist/db/index.js', '^(\\.{1,2}/.*)\\.js$': '$1' // 处理ES模块的.js后缀导入 }, testEnvironment: 'node' };
2. 处理db模块的ES模块标识
如果nodeLayer/db/package.json中设置了"type": "module",需在Jest配置中添加规则避免忽略该模块转译:
export default { // 保留原有其他配置 transformIgnorePatterns: ['/node_modules/(?!../nodeLayer/db)'] };
3. 调整TypeScript编译配置
可修改nodeLayer/db/tsconfig.json,让输出模块格式与Jest兼容:
{ "compilerOptions": { "module": "CommonJS", // 若需ES模块则设为ESNext,需配合Jest的ES模块配置 "target": "ES2020", "outDir": "./dist/db", "rootDir": "./src" } }
三、验证配置
修改完成后运行测试命令,确认问题解决:
npm run test
内容的提问来源于stack exchange,提问作者kyoshida
相关产品推荐
相关产品推荐

