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

gijlo24d  于 2022-12-08  发布在  Jest
关注(0)|答案(3)|浏览(167)

在AWS CDK中,我可以编写一个Jest单元测试来测试一个资源是否有一个特定的属性。但是我如何测试一个不是属性的资源DeletionPolicy值呢?
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"
});
tv6aics1

tv6aics11#

您可以使用以下示例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));
gajydyqb

gajydyqb2#

这里是一个更新的片段确认工作的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);
});
dddzy1tm

dddzy1tm3#

更新了CDK 2.x的代码段

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

相关问题