Skip to content

Commit a6600d3

Browse files
authored
feat: Matches toBe(null) and toEqual(null) in addition to toBeNull() in prefer-document (#153)
Fixes #152
1 parent cdbc37d commit a6600d3

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

docs/rules/prefer-in-document.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ expect(wrapper.queryByText("foo")).toHaveLength(1);
1515
expect(queryByText("foo")).toHaveLength(0);
1616
expect(queryByText("foo")).toBeNull();
1717
expect(queryByText("foo")).not.toBeNull();
18+
expect(queryByText("foo")).toBe(null);
19+
expect(queryByText("foo")).not.toBe(null);
20+
expect(queryByText("foo")).toEqual(null);
21+
expect(queryByText("foo")).not.toEqual(null);
1822
expect(queryByText("foo")).toBeDefined();
1923
expect(queryByText("foo")).not.toBeDefined();
2024

src/__tests__/lib/rules/prefer-in-document.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ const valid = [
8282
`import {NUM_BUTTONS} from "./foo";
8383
expect(screen.getByText('foo')).toHaveLength(NUM_BUTTONS)`,
8484
`expect(screen.getAllByText("foo")).toHaveLength(getLength())`,
85+
`expect(screen.getAllByText("foo")).toBe(foo)`,
86+
`expect(screen.getAllByText("foo")).toEqual(foo)`,
8587
];
8688
const invalid = [
8789
invalidCase(
@@ -239,6 +241,22 @@ const invalid = [
239241
`expect(queryByText('foo')) .not .toBeNull()`,
240242
`expect(queryByText('foo')).toBeInTheDocument()`
241243
),
244+
invalidCase(
245+
`expect(queryByText('foo')).toBe(null)`,
246+
`expect(queryByText('foo')).not.toBeInTheDocument()`
247+
),
248+
invalidCase(
249+
`expect(queryByText('foo')).not.toBe(null)`,
250+
`expect(queryByText('foo')).toBeInTheDocument()`
251+
),
252+
invalidCase(
253+
`expect(queryByText('foo')).toEqual(null)`,
254+
`expect(queryByText('foo')).not.toBeInTheDocument()`
255+
),
256+
invalidCase(
257+
`expect(queryByText('foo')).not.toEqual(null)`,
258+
`expect(queryByText('foo')).toBeInTheDocument()`
259+
),
242260
invalidCase(
243261
`expect(queryByText('foo')).toBeDefined()`,
244262
`expect(queryByText('foo')).toBeInTheDocument()`

src/rules/prefer-in-document.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* @author Anton Niklasson
44
*/
55

6+
/*eslint complexity: ["error", {"max": 20}]*/
7+
68
import { queries } from "../queries";
79
import { getAssignmentForIdentifier } from "../assignment-ast";
810

@@ -24,16 +26,22 @@ export const meta = {
2426
function isAntonymMatcher(matcherNode, matcherArguments) {
2527
return (
2628
matcherNode.name === "toBeNull" ||
29+
usesToBeOrToEqualWithNull(matcherNode, matcherArguments) ||
2730
usesToHaveLengthZero(matcherNode, matcherArguments)
2831
);
2932
}
3033

34+
function usesToBeOrToEqualWithNull(matcherNode, matcherArguments) {
35+
return (matcherNode.name === "toBe" || matcherNode.name === "toEqual") &&
36+
matcherArguments[0].value === null;
37+
}
38+
3139
function usesToHaveLengthZero(matcherNode, matcherArguments) {
3240
return matcherNode.name === "toHaveLength" && matcherArguments[0].value === 0;
3341
}
3442

3543
export const create = (context) => {
36-
const alternativeMatchers = /(toHaveLength|toBeDefined|toBeNull)/;
44+
const alternativeMatchers = /^(toHaveLength|toBeDefined|toBeNull|toBe|toEqual)$/;
3745
function getLengthValue(matcherArguments) {
3846
let lengthValue;
3947

@@ -79,6 +87,13 @@ export const create = (context) => {
7987
}
8088
}
8189

90+
// toBe() or toEqual() are only invalid with null
91+
if (matcherNode.name === "toBe" || matcherNode.name === "toEqual") {
92+
if (!usesToBeOrToEqualWithNull(matcherNode, matcherArguments)) {
93+
return;
94+
}
95+
}
96+
8297
const query = queryNode.name || queryNode.property.name;
8398

8499
if (queries.includes(query)) {

0 commit comments

Comments
 (0)