AWS CDK Jest 单元测试资源具有 DeletionPolicy

时间:2021-06-04 19:12:55

标签: jestjs aws-cdk

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

2 个答案:

答案 0 :(得分:0)

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

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

示例中的片段

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

答案 1 :(得分:0)

这是一个更新的片段,确认在 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);
});
相关问题