You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:23:27