typescript - 由于 s3key 哈希值更改,为 AWS CDK 编写的单元测试失败

标签 typescript aws-lambda aws-cdk ts-jest

我在 TS 项目中为 AWS CDK 编写了一些单元测试。 我在堆栈中使用 AWS::Lambda::Function

我的单元测试如下:我试图查看编译代码的目录位置是否已正确配置,没有错误。

test('is lambda code location correct',()=>{
template.hasResourceProperties("AWS::Lambda::Function",{
    Code:{
    S3Key:"d3c2479c6eb03922101251992e353c5e3f631cf5a055030bbf6cc6cab81e5198.zip"
}})
});

我正在使用 aws-cdk-lib/assertions 模板来测试我的堆栈。

在编写此测试之前,我尝试进行了一些挖掘,以确保此 s3Key 哈希不会更改。有些主题表明此 s3Key 是代码目录路径的 md5 哈希值,不会更改。 问题是一段时间后它确实发生了变化。我假设它取决于其他一些方面而不仅仅是路径。

我如何断言我的 lambda 函数的位置将保持不变?

我的 lambda 配置如下:

 const lambdaFunction = new lambda.Function(this, 'alb-request', {
                codeSigningConfig,
                runtime: lambda.Runtime.NODEJS_16_X,
                handler: 'index.handler',
                code: lambda.Code.fromAsset(path.join(__dirname, '../src/lambdas/alb-request/dist')),
            });

最佳答案

您当前正在做出类似快照的断言,表明代码未更改*

Docs: The AWS CDK generates a source hash for assets. This can be used at construction time to determine whether the contents of an asset have changed.

要断言函数资源的代码来自给定目录,请将模板 S3KeyAssetStaging 生成的 DIY 哈希进行比较。构造:

test("The function's code comes from dist", () => {
  const staging = new AssetStaging(app, "Staging", {
    sourcePath: path.join(__dirname, "../src/lambdas/alb-request/dist"),
  });

  template.hasResourceProperties("AWS::Lambda::Function", {
    Code: { S3Key: staging.assetHash + ".zip" },
  });
});

要更普遍地断言 Lambda 资源具有任何代码包,请使用 stringLikeRegexp Matcher ,它匹配任何 .zip 文件:

template.hasResourceProperties("AWS::Lambda::Function", {
  Code: { S3Key: Match.stringLikeRegexp(".*.zip$") },
});

* 哈希计算中不考虑代码目录路径:两个路径中的相同代码将产生相同的 .zip 文件名。

关于typescript - 由于 s3key 哈希值更改,为 AWS CDK 编写的单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74765888/

相关文章:

typescript - 将参数属性速记与 TypeScript 中的解构相结合

aws-lambda - 无服务器 AWS 上的全局无边界实现网站/应用程序

aws-lambda - 使用隐式 API 对 template.yaml 中的方法启用 cors

javascript - Promise 内 bcrypt 的 Promise {<pending>}

amazon-web-services - CDK 仅在不存在时创建新的托管策略

aws-lambda - 运行 sam 本地调用时调用容器没有响应

javascript - Javascript中的回调机制

angular - 如何根据用户角色显示/隐藏元素 Angular 4

node.js - ENOENT 错误 - 安装 aws-cdk Node 模块

typescript - 处理未包装的可变元组类型