Skip to content

Commit

Permalink
feat: add support for resolves/rejects matchers in async queries (#64)
Browse files Browse the repository at this point in the history
* feat: add support for resolves/rejects matchers in async queries

* fix: check if there is an expect matcher

* docs: add example for resolves/reject matcher in async queries
  • Loading branch information
Thomas Lombart authored and Belco90 committed Jan 22, 2020
1 parent 22636b1 commit d0a1585
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 1 deletion.
4 changes: 4 additions & 0 deletions docs/rules/await-async-query.md
Expand Up @@ -52,6 +52,10 @@ const bar = () => {

// return the promise within a function is correct too!
const findMyButton = () => findByText('my button');

// using a resolves/rejects matcher is also correct
expect(findByTestId('alert')).resolves.toBe('Success');
expect(findByTestId('alert')).rejects.toBe('Error');
```

## Further Reading
Expand Down
22 changes: 21 additions & 1 deletion lib/rules/await-async-query.js
Expand Up @@ -30,7 +30,11 @@ module.exports = {
const testingLibraryQueryUsage = [];
return {
[`CallExpression > Identifier[name=${ASYNC_QUERIES_REGEXP}]`](node) {
if (!isAwaited(node.parent.parent) && !isPromiseResolved(node)) {
if (
!isAwaited(node.parent.parent) &&
!isPromiseResolved(node) &&
!hasClosestExpectResolvesRejects(node)
) {
testingLibraryQueryUsage.push(node);
}
},
Expand Down Expand Up @@ -101,3 +105,19 @@ function isPromiseResolved(node) {
// promise.then(...)
return hasAThenProperty(parent);
}

function hasClosestExpectResolvesRejects(node) {
if (!node.parent) {
return;
}

if (node.type === 'CallExpression' && node.callee.name === 'expect') {
const expectMatcher = node.parent.property;
return (
expectMatcher &&
(expectMatcher.name === 'resolves' || expectMatcher.name === 'rejects')
);
} else {
return hasClosestExpectResolvesRejects(node.parent);
}
}
16 changes: 16 additions & 0 deletions tests/lib/rules/await-async-query.js
Expand Up @@ -118,6 +118,22 @@ ruleTester.run('await-async-query', rule, {
}
`,
},

// resolves/rejects matchers are valid
...ASYNC_QUERIES_COMBINATIONS.map(query => ({
code: `test(() => {
expect(${query}("foo")).resolves.toBe("bar")
expect(wrappedQuery(${query}("foo"))).resolves.toBe("bar")
})
`,
})),
...ASYNC_QUERIES_COMBINATIONS.map(query => ({
code: `test(() => {
expect(${query}("foo")).rejects.toBe("bar")
expect(wrappedQuery(${query}("foo"))).rejects.toBe("bar")
})
`,
})),
],

invalid:
Expand Down

0 comments on commit d0a1585

Please sign in to comment.