Skip to content

Commit 68d9371

Browse files
author
Rory Jennings
committed
fix: support configuration for prefer-presence-queries (testing-library#518)
1 parent a94006a commit 68d9371

File tree

3 files changed

+675
-120
lines changed

3 files changed

+675
-120
lines changed

Diff for: docs/rules/prefer-presence-queries.md

+21
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,27 @@ test('some test', async () => {
5959
});
6060
```
6161

62+
## Options
63+
64+
| Option | Required | Default | Details |
65+
| ---------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
66+
| `presence` | No | `true` | If enabled, this rule will ensure `getBy*` is used to validate whether an element is present. If disabled, `queryBy*` will be accepted for presence queries. |
67+
| `absence` | No | `true` | If enabled, this rule will ensure `queryBy*` is used to validate whether an element is absent. If disabled, `getBy*` will be accepted for absence queries. |
68+
69+
## Example
70+
71+
```json
72+
{
73+
"testing-library/prefer-presence-queries": [
74+
2,
75+
{
76+
"presence": true,
77+
"absence": false
78+
}
79+
]
80+
}
81+
```
82+
6283
## Further Reading
6384

6485
- [Testing Library queries cheatsheet](https://testing-library.com/docs/dom-testing-library/cheatsheet#queries)

Diff for: lib/rules/prefer-presence-queries.ts

+30-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ import { findClosestCallNode, isMemberExpression } from '../node-utils';
55

66
export const RULE_NAME = 'prefer-presence-queries';
77
export type MessageIds = 'wrongAbsenceQuery' | 'wrongPresenceQuery';
8-
type Options = [];
8+
export type Options = [
9+
{
10+
presence?: boolean;
11+
absence?: boolean;
12+
}
13+
];
914

1015
export default createTestingLibraryRule<Options, MessageIds>({
1116
name: RULE_NAME,
@@ -26,12 +31,31 @@ export default createTestingLibraryRule<Options, MessageIds>({
2631
wrongAbsenceQuery:
2732
'Use `queryBy*` queries rather than `getBy*` for checking element is NOT present',
2833
},
29-
schema: [],
34+
schema: [
35+
{
36+
type: 'object',
37+
additionalProperties: false,
38+
properties: {
39+
presence: {
40+
type: 'boolean',
41+
},
42+
absence: {
43+
type: 'boolean',
44+
},
45+
},
46+
},
47+
],
3048
type: 'suggestion',
3149
},
32-
defaultOptions: [],
50+
defaultOptions: [
51+
{
52+
presence: true,
53+
absence: true,
54+
},
55+
],
3356

34-
create(context, _, helpers) {
57+
create(context, [options], helpers) {
58+
const { presence, absence } = options;
3559
return {
3660
'CallExpression Identifier'(node: TSESTree.Identifier) {
3761
const expectCallNode = findClosestCallNode(node, 'expect');
@@ -55,9 +79,9 @@ export default createTestingLibraryRule<Options, MessageIds>({
5579
return;
5680
}
5781

58-
if (isPresenceAssert && !isPresenceQuery) {
82+
if (presence && isPresenceAssert && !isPresenceQuery) {
5983
context.report({ node, messageId: 'wrongPresenceQuery' });
60-
} else if (isAbsenceAssert && isPresenceQuery) {
84+
} else if (absence && isAbsenceAssert && isPresenceQuery) {
6185
context.report({ node, messageId: 'wrongAbsenceQuery' });
6286
}
6387
},

0 commit comments

Comments
 (0)