如何测试传递给s3.Bucket的所有prop?我想测试传递给s3.Bucket的所有属性(无快照)。测试给我一个关于WebsiteConfiguration的错误...为了检查如何在toHaveResource fn中编写prop obj,我使用了this doc
有人能帮我吗?
import * as cdk from "@aws-cdk/core";
import * as s3 from "@aws-cdk/aws-s3";
export class S3CdkStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.Bucket(this, "ReactGitHubActionBucket", {
versioned: true,
publicReadAccess: true,
websiteIndexDocument: "index.html",
removalPolicy: cdk.RemovalPolicy.DESTROY,
autoDeleteObjects: true,
});
}
}import { expect as expectCDK, haveResource } from '@aws-cdk/assert';
import * as cdk from '@aws-cdk/core';
import * as Stacks from '../lib/s3-cdk-stack';
test('First test', () => {
const app = new cdk.App();
const stack = new Stacks.S3CdkStack(app, 'S3CdkTestStack');
expectCDK(stack).to(haveResource("AWS::S3::Bucket",{
VersioningConfiguration: {
Status: "Enabled"
},
WebsiteConfiguration: {
IndexDocument: "index.html"
}
}))
});$ jest
FAIL test/stacks.test.ts
✕ First test (68 ms)
● First test
None of 1 resources matches resource 'AWS::S3::Bucket' with {
"$objectLike": {
"VersioningConfiguration": {
"Status": "Enabled"
},
"WebsiteConfiguration": {
"IndexDocument": "index.html"
}
}
}.
- Field WebsiteConfiguration missing in:
{
"Type": "AWS::S3::Bucket",
"Properties": {
"VersioningConfiguration": {
"Status": "Enabled"
}
},
"UpdateReplacePolicy": "Retain",
"DeletionPolicy": "Retain"
}发布于 2021-07-13 12:39:46
在您写完问题后,它可能已经更新了,但是从CDK 1.113.0开始,下面的示例对我来说是有效的。
请注意,我的导入与您的导入略有不同,并且我使用的是.toHaveResource()而不是.to(haveResource())。
// CDK version: 1.113.0
import '@aws-cdk/assert/jest';
import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';
// Included for completeness, but you'd import this:
class S3CdkStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'ReactGitHubActionBucket', {
versioned: true,
publicReadAccess: true,
websiteIndexDocument: 'index.html',
removalPolicy: cdk.RemovalPolicy.DESTROY,
autoDeleteObjects: true,
});
}
}
// This test should pass:
test('Test complete S3 bucket configuration', () => {
const app = new cdk.App();
const stack = new S3CdkStack(app, 'S3CdkTestStack');
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓
expect(stack).toHaveResource('AWS::S3::Bucket', {
VersioningConfiguration: {
Status: 'Enabled',
},
WebsiteConfiguration: {
IndexDocument: 'index.html',
},
});
});额外提示:.toHaveResourceLike()
当您正在检查的资源属性值很简单时,.toHaveResource()工作得很好。
例如,您通过上面的S3CdkStack()类创建的CloudFormation模板包含一个具有以下Description属性的Lambda函数:
{
"Resources": {
"CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Description": {
"Fn::Join": [
"",
[
"Lambda function for auto-deleting objects in ",
{
"Ref": "ReactGitHubActionBucket1CE57800"
},
" S3 bucket."
]
]
}
}
}
}
}使用.toHaveResource()测试该描述中“自动删除”的存在(就像一个说明性示例)将需要包括整个描述对象,该对象是脆弱的,并且包含看起来像散列的东西……
在这种情况下,最好使用.toHaveResourceLike()并只检查您感兴趣的对象部分:
test('Test a subset of the Lambda description', () => {
const app = new cdk.App();
const stack = new S3CdkStack(app, 'S3CdkTestStack');
// ↓↓↓↓
expect(stack).toHaveResourceLike('AWS::Lambda::Function', {
// Only need to include the subset of
// the value object you're testing:
Description: {
'Fn::Join': [
'',
['Lambda function for auto-deleting objects in '],
],
},
});
});https://stackoverflow.com/questions/67228714
复制相似问题