在CDK测试中,toHaveResource和toHaveResourceLike有什么区别?

In CDK testing, what is the difference between toHaveResource and toHaveResourceLike?

CDK fine-grained construct tests有什么区别

expect(...).toHaveResource(...)

expect(...).toHaveResourceLike(...)

来自 @aws-cdk/assert/jest 模块?

根据代码 here and 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那么就成功了