Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(assert): more powerful matchers #8444

Merged
merged 4 commits into from
Jun 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion packages/@aws-cdk/assert/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ If you only care that a resource of a particular type exists (regardless of its

```ts
haveResource(type, subsetOfProperties)
haveResourceLike(type, subsetOfProperties)
```

Example:
Expand All @@ -76,7 +77,35 @@ expect(stack).to(haveResource('AWS::CertificateManager::Certificate', {
}));
```

`ABSENT` is a magic value to assert that a particular key in an object is *not* set (or set to `undefined`).
The object you give to `haveResource`/`haveResourceLike` like can contain the
following values:

- **Literal values**: the given property in the resource must match the given value *exactly*.
- `ABSENT`: a magic value to assert that a particular key in an object is *not* set (or set to `undefined`).
- `arrayWith(...)`/`objectLike(...)`/`deepObjectLike(...)`/`exactValue()`: special matchers
for inexact matching. You can use these to match arrays where not all elements have to match,
just a single one, or objects where not all keys have to match.

The difference between `haveResource` and `haveResourceLike` is the same as
between `objectLike` and `deepObjectLike`: the first allows
additional (unspecified) object keys only at the *first* level, while the
second one allows them in nested objects as well.

If you want to escape from the "deep lenient matching" behavior, you can use
`exactValue()`.

Slightly more complex example with array matchers:

```ts
expect(stack).to(haveResourceLike('AWS::IAM::Policy', {
PolicyDocument: {
Statement: arrayWith(objectLike({
Action: ['s3:GetObject'],
Resource: ['arn:my:arn'],
}})
}
}));
```
### Check number of resources
Expand Down
Loading