AWS CDK Jest 单元测试资源具有删除策略

问题描述 投票:0回答:4

在 AWS CDK 中,我可以编写 Jest 单元测试来测试资源是否具有特定属性。但是如何测试不是属性的资源 DeletionPolicy 值?

cdk.out/example.template.json(简化)

"AppsUserPool8FD9D0C0": {
  "Type": "AWS::Cognito::UserPool",
  "Properties": {
    "UserPoolName": "test",
    ...
  },
  "UpdateReplacePolicy": "Retain",
  "DeletionPolicy": "Retain",
  "Metadata": {}
}

Jest 属性单元测试通过(简化)

expect(stack).toHaveResourceLike('AWS::Cognito::UserPool', {
  "UserPoolName": "test"
});

Jest 单元测试因 DeletionPolicy 失败(简化)

expect(stack).toHaveResourceLike('AWS::Cognito::UserPool', {
  "DeletionPolicy": "Retain"
});
jestjs aws-cdk
4个回答
9
投票

更新了 CDK 2.x 的代码片段

const template = Template.fromStack(stack);
template.hasResource('AWS::Cognito::UserPool', {
  DeletionPolicy: 'Retain',
  UpdateReplacePolicy: 'Retain',
});

6
投票

您可以使用以下示例 https://github.com/aws/aws-cdk/blob/775a0c930a680f8a52bb4a40084d07492f7f9fee/packages/%40aws-cdk/aws-cloudformation/test/test.resource.ts#L57

您可以使用带有参数的haveResouce()

ResourcePart.CompleteDefinition

示例片段

      expect(stack).to(haveResource('AWS::CloudFormation::CustomResource', {
        DeletionPolicy: 'Retain',
        UpdateReplacePolicy: 'Retain',
      }, ResourcePart.CompleteDefinition));

2
投票

这是确认在 CDK 版本上工作的更新代码片段:1.107.0

import { ResourcePart } from '@aws-cdk/assert';

test('stack has correct policies', async () => {
    expect(stack).toHaveResource('AWS::Cognito::UserPool', {
        DeletionPolicy: 'Retain',
        UpdateReplacePolicy: 'Retain',
    }, ResourcePart.CompleteDefinition);
});

0
投票

如果仔细观察生成的 CloudFormation 模板,每个资源都有一个

Properties
对象。例如,在此 S3 资源中:

"Resources": {
  "BucketName2A2AF266": {
    "Type": "AWS::S3::Bucket",
    "Properties": {
      "BucketName": "bucket-name",
      "Tags": [
        {
          "Key": "aws-cdk:auto-delete-objects",
          "Value": "true"
        }
      ]
    },
    "UpdateReplacePolicy": "Delete",
    "DeletionPolicy": "Delete",
    "Metadata": {
      "aws:cdk:path": "Stack/Bucket/Resource"
    }
  }
}

要测试

BucketName
(或其他
Properties
值),请使用
hasResourceProperties
方法。

但是,如果您想测试

DeletionPolicy
UpdateReplacePolicy
(位于
Properties
之外)等属性,请改用
hasResource
方法。

  • hasResourceProperties
    :仅测试
    Properties
    对象。
  • hasResource
    :测试完整的资源定义。

我使用的是CDK 2.172.0版本。

© www.soinside.com 2019 - 2024. All rights reserved.