AWS Lambda Jest测试:如何忽略Handler无需的context参数?
问题
使用Jest v29测试AWS Lambda时,测试文件报错:"An argument for 'context' was not provided."
我的Lambda代码(index.ts):
import { Handler } from 'aws-lambda'; export const handler: Handler = async (event) => { const method = event.httpMethod; if (method !== 'PUT') { return { statusCode: 401, body: JSON.stringify('Method Not Allowed') }; } return { statusCode: 404, body: JSON.stringify({ message: 'Hello' }), }; }
测试文件(index.test.ts):
import { handler } from './index'; describe('handler', () => { it('should return the message "Method Not Allowed" if method is not PUT', async () => { const event = { httpMethod: 'POST', }; const result = await handler(event); expect(result.statusCode).toBe(401); expect(result.body).toBe(JSON.stringify('Method Not Allowed')); }); });
已尝试但无效的方法:
- 传入null值:
await handler(event, null, null) - 传入undefined和null:
await handler(event, undefined, null) - 在Lambda中自定义类型:
type Handler = (event: any) => Promise;
由于未使用AWS Handler的Context或Callback,请问该如何解决此错误?
解决方法
这个错误核心是TypeScript类型校验问题——你导入的官方Handler类型要求必须传入context参数,哪怕代码里实际没用到它。以下是几种有效解决方式:
方案1:显式忽略context参数(推荐)
在Lambda函数定义里用下划线_接收context参数,明确表示不需要使用它,同时保留AWS官方Handler类型的兼容性:
import { Handler } from 'aws-lambda'; // 用_接收context参数,满足类型校验要求 export const handler: Handler = async (event, _) => { const method = event.httpMethod; if (method !== 'PUT') { return { statusCode: 401, body: JSON.stringify('Method Not Allowed') }; } return { statusCode: 404, body: JSON.stringify({ message: 'Hello' }), }; }
修改后测试时只需传入event参数,TypeScript不会再报错。
方案2:使用泛型指定可选context
利用Handler的泛型特性,将context类型指定为undefined,允许调用时不传该参数:
import { Handler } from 'aws-lambda'; // 显式指定context为undefined类型 export const handler: Handler<any, any, undefined> = async (event) => { // 原代码逻辑不变 }
方案3:临时放宽类型校验(不推荐)
在tsconfig.json中设置"strictFunctionTypes": false,关闭严格函数类型检查。但这会放宽整个项目的类型校验标准,可能引入其他潜在问题,仅作为临时应急方案。
内容的提问来源于stack exchange,提问作者codebear22
相关产品推荐
相关产品推荐

