问题描述
在CDK fine-grained construct tests中,两者之间有什么区别
expect(...).toHaveResource(...)
和
expect(...).toHaveResourceLike(...)
是来自@aws-cdk/assert/jest
模块?
解决方法
根据代码here和here,唯一的区别是toHaveResource
要求传递的键值必须完全匹配,而在toHaveResourceLike
中,实际值可以是参考值的超集。换句话说,如果您要声明某个属性的值,该属性本身就是一个对象,并且只想声明该对象的子集,则应使用toHaveResourceLike
。
例如,假设您要断言S3存储桶资源具有PublicAccessBlockConfiguration
属性,且BlockPublicPolicy
设置为true。
您可能会这样写:
test("has public access restricted",() => {
expect(stack).toHaveResource("AWS::S3::Bucket",{
PublicAccessBlockConfiguration: {
BlockPublicPolicy: true,},});
});
但是这将失败,因为PublicAccessBlockConfiguration
还具有其他子属性,例如BlockPublicAcls
。但是,如果您将此处的toHaveResource
切换为toHaveResourceLike
,它将成功。