使用DynamoDB TableV2时CDK中的Jest测试失败问题
解决AWS CDK中DynamoDB TableV2的Jest测试失败问题
问题场景
在AWS CDK中使用dynamodb.TableV2创建数据表后,运行Jest测试时出现失败:原本测试代码校验栈中AWS::DynamoDB::Table资源数量为1,但实际检测不到该类型资源。而改用旧版dynamodb.Table创建表时,测试可正常通过;将测试中的资源类型改为AWS::DynamoDB::TableV2后,测试也能正常运行。
原因分析
CDK的dynamodb.TableV2是对应DynamoDB新资源模型的构造类,它在CloudFormation中生成的资源类型是AWS::DynamoDB::TableV2,而非旧版Table对应的AWS::DynamoDB::Table。因此测试中如果仍用旧资源类型做校验,自然会出现不匹配的失败结果。
解决方案
修改Jest测试代码中的资源类型校验,将AWS::DynamoDB::Table替换为AWS::DynamoDB::TableV2即可。
示例代码
原失败测试代码
test('should create one DynamoDB Table', () => { const app = new cdk.App(); const stack = new cdk.Stack(app, 'TestStack'); // 用TableV2创建表的代码 new dynamodb.TableV2(stack, 'MyTable', { partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING }, }); // 校验旧资源类型,会失败 expect(stack).toCountResources('AWS::DynamoDB::Table', 1); });
修改后的成功测试代码
test('should create one DynamoDB TableV2', () => { const app = new cdk.App(); const stack = new cdk.Stack(app, 'TestStack'); new dynamodb.TableV2(stack, 'MyTable', { partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING }, }); // 校验新资源类型,正常通过 expect(stack).toCountResources('AWS::DynamoDB::TableV2', 1); });
内容的提问来源于stack exchange,提问作者Khaled Abbas
相关产品推荐
相关产品推荐

