Skip to content

Commit e8cefd3

Browse files
authored
fix(prefer-in-document): check that argument exists before accessing (#242)
1 parent 03f8df9 commit e8cefd3

9 files changed

+16
-3
lines changed

src/__tests__/lib/rules/prefer-empty.js

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import * as rule from "../../../rules/prefer-empty";
1818
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } });
1919
ruleTester.run("prefer-empty", rule, {
2020
valid: [
21+
`expect().toBe(true)`,
2122
`expect(element.innerHTML).toBe('foo')`,
2223
`expect(element.innerHTML).toBe(foo)`,
2324
`expect(element.innerHTML).toBe(foo + bar)`,

src/__tests__/lib/rules/prefer-focus.js

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import * as rule from "../../../rules/prefer-focus";
99
const ruleTester = new RuleTester();
1010
ruleTester.run("prefer-focus", rule, {
1111
valid: [
12+
`expect().toBe(true)`,
1213
`expect(input).not.toHaveFocus();`,
1314
`expect(input).toHaveFocus();`,
1415
`expect(document.activeElement).toBeNull()`,

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

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ function invalidCase(code, output) {
2727
}
2828

2929
const valid = [
30+
"expect().toBe(true)",
3031
...["getByText", "getByRole"].map((q) => [
3132
`expect(screen.${q}('foo')).toBeInTheDocument()`,
3233
`expect(${q}('foo')).toBeInTheDocument()`,

src/__tests__/lib/rules/prefer-prefer-to-have-class.js

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const errors = [{ messageId: "use-to-have-class" }];
55
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } });
66
ruleTester.run("prefer-to-have-class", rule, {
77
valid: [
8+
`expect().toBe(true)`,
89
`const el = screen.getByText("foo"); expect(el).toHaveClass("bar")`,
910
`const el = screen.getByText("foo"); expect(el.class).toEqual(foo)`,
1011
`const el = screen.getByText("foo"); expect(el).toHaveAttribute("class")`,

src/__tests__/lib/rules/prefer-to-have-attribute.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import * as rule from "../../../rules/prefer-to-have-attribute";
1818
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } });
1919
ruleTester.run("prefer-to-have-attribute", rule, {
2020
valid: [
21+
"expect().toBe(true)",
2122
"expect(element.foo).toBeTruthy()",
2223
"expect(element.getAttributeNode()).toBeNull()",
2324
`expect(element.getAttribute('foo')).toBeGreaterThan(2)`,
@@ -44,8 +45,7 @@ ruleTester.run("prefer-to-have-attribute", rule, {
4445
output: `expect(element).toHaveAttribute('foo', expect.stringContaining('bar'));`,
4546
},
4647
{
47-
code:
48-
"expect(element.getAttribute('foo')).toContain(`bar=${encodeURIComponent(baz.id)}`);",
48+
code: "expect(element.getAttribute('foo')).toContain(`bar=${encodeURIComponent(baz.id)}`);",
4949
errors: [
5050
{
5151
message: "Use toHaveAttribute instead of asserting on getAttribute",

src/__tests__/lib/rules/prefer-to-have-style.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const errors = [
77
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } });
88
ruleTester.run("prefer-to-have-style", rule, {
99
valid: [
10+
`expect().toBe(true)`,
1011
`expect(el).toHaveStyle({foo:"bar"})`,
1112
`expect(el.style).toMatchSnapshot()`,
1213
`expect(el.style).toEqual(foo)`,

src/__tests__/lib/rules/prefer-to-have-text-content.js

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import * as rule from "../../../rules/prefer-to-have-text-content";
1818
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } });
1919
ruleTester.run("prefer-to-have-text-content", rule, {
2020
valid: [
21+
`expect().toBe(true)`,
2122
`expect(string).toBe("foo")`,
2223
`expect(element).toHaveTextContent("foo")`,
2324
`expect(container.lastNode).toBe("foo")`,

src/__tests__/lib/rules/prefer-to-have-value.js

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2020 } });
2020
const errors = [{ messageId: "use-to-have-value" }];
2121
ruleTester.run("prefer-to-have-value", rule, {
2222
valid: [
23+
`expect().toBe(true)`,
2324
`expect(screen.getByRole("radio").value).toEqual("foo")`,
2425
`expect(screen.queryAllByRole("checkbox")[0].value).toStrictEqual("foo")`,
2526
`async function x() { expect((await screen.findByRole("button")).value).toBe("foo") }`,

src/rules/prefer-in-document.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ function usesToHaveLengthZero(matcherNode, matcherArguments) {
4444
}
4545

4646
export const create = (context) => {
47-
const alternativeMatchers = /^(toHaveLength|toBeDefined|toBeNull|toBe|toEqual|toBeTruthy|toBeFalsy)$/;
47+
const alternativeMatchers =
48+
/^(toHaveLength|toBeDefined|toBeNull|toBe|toEqual|toBeTruthy|toBeFalsy)$/;
4849
function getLengthValue(matcherArguments) {
4950
let lengthValue;
5051

@@ -216,6 +217,11 @@ export const create = (context) => {
216217
node
217218
) {
218219
const arg = node.callee.object.arguments[0];
220+
221+
if (!arg) {
222+
return;
223+
}
224+
219225
const queryNode =
220226
arg.type === "AwaitExpression" ? arg.argument.callee : arg.callee;
221227
const matcherNode = node.callee.property;

0 commit comments

Comments
 (0)