AWS CDK Jest 单元测试资源有 DeletionPolicy

AWS CDK Jest Unit Test Resource Has DeletionPolicy

在 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"
});

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

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

你可以使用下面的例子 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));

这是一个已确认适用于 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);
});