在 NodeJS + Typescript AWS Lambda 上进行单元测试

Posted

技术标签:

【中文标题】在 NodeJS + Typescript AWS Lambda 上进行单元测试【英文标题】:Unit Testing on a NodeJS + Typescript AWS Lambda 【发布时间】:2020-09-15 23:29:24 【问题描述】:

哪一种是使用 TypeScript 对 NodeJS 中实现的 lambda 进行单元测试的最佳方法,比如这个虚拟的:

import Callback from "aws-lambda";

export interface BinaryEvent 
  number1: number
  number2: number


export interface Result 
  result: number


export type BinaryOperation = (number1: number, number2: number) => number;

export type BinaryOperationHandler = (number1, number2: BinaryEvent, context: any, callback: Callback<Result>) => void;

export const addition: BinaryOperationHandler = (number1, number2, context, callback) => 
  setTimeout(() => callback(null, result: (number1 + number2)), 1000);

【问题讨论】:

【参考方案1】:

我设法找到了一种使用 jest.fn() 进行单元测试的方法,如下所示:

import addition from "./index";

it('Sums 2 numbers', async() => 
  const number1 = 3, number2 = 2, callback = jest.fn();
  await addition(number1, number2, , callback);
  expect(callback.mock.calls.length).toBe(1);
  expect(callback.mock.calls[0][1].result).toBe(number1 + number2);
)

github repo 中提供了一个完整的工作虚拟示例:https://github.com/jvillane/aws-sam-lambda-jest-unit-test

【讨论】:

以上是关于在 NodeJS + Typescript AWS Lambda 上进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

AWS-CDK 基础初始化

AWS-CDK 基础初始化

Typescript/nodejs:变量在某些位置隐含类型为“any”

Typescript - AWS CDK 启用 CORS

typescript AWS Lambda TypeScript类型定义

使用 AWS Lambda (NodeJS) 创建 AWS AppSync