如何避免AWS CloudFront Function导出错误并实现单元测试?
解决CloudFront函数关联错误及Jest单元测试问题
一、修复CloudFront关联时的「SyntaxError: Illegal export statement」错误
CloudFront Functions运行环境不支持ES模块的export语法或CommonJS的module.exports导出规则,仅要求定义全局的handler函数即可。
- 确保函数代码中移除所有
export、export default或module.exports相关语句,仅保留全局handler函数,示例代码如下:// myfun.js function handler(event) { return event.request; }
二、修复Jest测试的「TypeError: handler is not a function」错误
直接用require导入上述代码时,Node.js(Jest运行环境)无法识别全局的handler函数,需添加条件导出逻辑,让代码同时兼容CloudFront生产环境和Jest测试环境:
1. 修改函数代码,添加条件导出
// myfun.js function handler(event) { return event.request; } // 仅在Node.js环境下导出handler,供Jest测试使用 if (typeof module !== 'undefined' && module.exports) { module.exports = handler; }
2. 调整Jest测试代码
你的测试逻辑本身无误,确认导入对象为handler即可:
const handler = require('./myfun.js'); test('handler返回正确的request对象', () => { const testEvent = { request: {} }; expect(handler(testEvent)).toStrictEqual(testEvent.request); });
三、验证方案
- CloudFront端:上传修改后的函数并关联到分发,不会再出现非法导出语句的错误,函数可正常运行。
- Jest测试端:执行
jest命令,测试将正常执行,不再抛出类型错误。
内容的提问来源于stack exchange,提问作者Efren
相关产品推荐
相关产品推荐

