Tof*_*nov 8

根据此处此处的代码,唯一的区别是toHaveResource要求传递的键的值必须完全匹配,而toHaveResourceLike实际值可以是参考值的超集。换句话说,如果您试图断言某些属性的值,它本身就是一个对象,并且您只想断言对象的子集,那么您应该使用toHaveResourceLike.

例如,假设您尝试断言您的 S3 存储桶资源具有设置为 true的PublicAccessBlockConfiguration属性BlockPublicPolicy

你可能会这样写:

test("has public access restricted", () => {
  expect(stack).toHaveResource("AWS::S3::Bucket", {
    PublicAccessBlockConfiguration: {
      BlockPublicPolicy: true,
    },
  });
});
Run Code Online (Sandbox Code Playgroud)

但这会失败,因为PublicAccessBlockConfiguration还有其他子属性,如BlockPublicAcls. 但是如果你切换toHaveResource到这里,toHaveResourceLike它就会成功。