diff --git a/src/__tests__/lib/rules/prefer-empty.js b/src/__tests__/lib/rules/prefer-empty.js index 9480fd2..5a4b529 100644 --- a/src/__tests__/lib/rules/prefer-empty.js +++ b/src/__tests__/lib/rules/prefer-empty.js @@ -18,6 +18,7 @@ import * as rule from "../../../rules/prefer-empty"; const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } }); ruleTester.run("prefer-empty", rule, { valid: [ + `expect().toBe(true)`, `expect(element.innerHTML).toBe('foo')`, `expect(element.innerHTML).toBe(foo)`, `expect(element.innerHTML).toBe(foo + bar)`, diff --git a/src/__tests__/lib/rules/prefer-focus.js b/src/__tests__/lib/rules/prefer-focus.js index 8e35dc3..aa4be8c 100644 --- a/src/__tests__/lib/rules/prefer-focus.js +++ b/src/__tests__/lib/rules/prefer-focus.js @@ -9,6 +9,7 @@ import * as rule from "../../../rules/prefer-focus"; const ruleTester = new RuleTester(); ruleTester.run("prefer-focus", rule, { valid: [ + `expect().toBe(true)`, `expect(input).not.toHaveFocus();`, `expect(input).toHaveFocus();`, `expect(document.activeElement).toBeNull()`, diff --git a/src/__tests__/lib/rules/prefer-in-document.js b/src/__tests__/lib/rules/prefer-in-document.js index 1f3c856..cb2d824 100644 --- a/src/__tests__/lib/rules/prefer-in-document.js +++ b/src/__tests__/lib/rules/prefer-in-document.js @@ -27,6 +27,7 @@ function invalidCase(code, output) { } const valid = [ + "expect().toBe(true)", ...["getByText", "getByRole"].map((q) => [ `expect(screen.${q}('foo')).toBeInTheDocument()`, `expect(${q}('foo')).toBeInTheDocument()`, diff --git a/src/__tests__/lib/rules/prefer-prefer-to-have-class.js b/src/__tests__/lib/rules/prefer-prefer-to-have-class.js index 3f1f58a..f06b496 100644 --- a/src/__tests__/lib/rules/prefer-prefer-to-have-class.js +++ b/src/__tests__/lib/rules/prefer-prefer-to-have-class.js @@ -5,6 +5,7 @@ const errors = [{ messageId: "use-to-have-class" }]; const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } }); ruleTester.run("prefer-to-have-class", rule, { valid: [ + `expect().toBe(true)`, `const el = screen.getByText("foo"); expect(el).toHaveClass("bar")`, `const el = screen.getByText("foo"); expect(el.class).toEqual(foo)`, `const el = screen.getByText("foo"); expect(el).toHaveAttribute("class")`, diff --git a/src/__tests__/lib/rules/prefer-to-have-attribute.js b/src/__tests__/lib/rules/prefer-to-have-attribute.js index cf02195..e55e03e 100644 --- a/src/__tests__/lib/rules/prefer-to-have-attribute.js +++ b/src/__tests__/lib/rules/prefer-to-have-attribute.js @@ -18,6 +18,7 @@ import * as rule from "../../../rules/prefer-to-have-attribute"; const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } }); ruleTester.run("prefer-to-have-attribute", rule, { valid: [ + "expect().toBe(true)", "expect(element.foo).toBeTruthy()", "expect(element.getAttributeNode()).toBeNull()", `expect(element.getAttribute('foo')).toBeGreaterThan(2)`, @@ -44,8 +45,7 @@ ruleTester.run("prefer-to-have-attribute", rule, { output: `expect(element).toHaveAttribute('foo', expect.stringContaining('bar'));`, }, { - code: - "expect(element.getAttribute('foo')).toContain(`bar=${encodeURIComponent(baz.id)}`);", + code: "expect(element.getAttribute('foo')).toContain(`bar=${encodeURIComponent(baz.id)}`);", errors: [ { message: "Use toHaveAttribute instead of asserting on getAttribute", diff --git a/src/__tests__/lib/rules/prefer-to-have-style.js b/src/__tests__/lib/rules/prefer-to-have-style.js index 9c8c21a..08c3c63 100644 --- a/src/__tests__/lib/rules/prefer-to-have-style.js +++ b/src/__tests__/lib/rules/prefer-to-have-style.js @@ -7,6 +7,7 @@ const errors = [ const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } }); ruleTester.run("prefer-to-have-style", rule, { valid: [ + `expect().toBe(true)`, `expect(el).toHaveStyle({foo:"bar"})`, `expect(el.style).toMatchSnapshot()`, `expect(el.style).toEqual(foo)`, diff --git a/src/__tests__/lib/rules/prefer-to-have-text-content.js b/src/__tests__/lib/rules/prefer-to-have-text-content.js index 9a8b146..1d47704 100644 --- a/src/__tests__/lib/rules/prefer-to-have-text-content.js +++ b/src/__tests__/lib/rules/prefer-to-have-text-content.js @@ -18,6 +18,7 @@ import * as rule from "../../../rules/prefer-to-have-text-content"; const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } }); ruleTester.run("prefer-to-have-text-content", rule, { valid: [ + `expect().toBe(true)`, `expect(string).toBe("foo")`, `expect(element).toHaveTextContent("foo")`, `expect(container.lastNode).toBe("foo")`, diff --git a/src/__tests__/lib/rules/prefer-to-have-value.js b/src/__tests__/lib/rules/prefer-to-have-value.js index d965fbf..062a79c 100644 --- a/src/__tests__/lib/rules/prefer-to-have-value.js +++ b/src/__tests__/lib/rules/prefer-to-have-value.js @@ -20,6 +20,7 @@ const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2020 } }); const errors = [{ messageId: "use-to-have-value" }]; ruleTester.run("prefer-to-have-value", rule, { valid: [ + `expect().toBe(true)`, `expect(screen.getByRole("radio").value).toEqual("foo")`, `expect(screen.queryAllByRole("checkbox")[0].value).toStrictEqual("foo")`, `async function x() { expect((await screen.findByRole("button")).value).toBe("foo") }`, diff --git a/src/rules/prefer-in-document.js b/src/rules/prefer-in-document.js index 1b9e375..c04a0e4 100644 --- a/src/rules/prefer-in-document.js +++ b/src/rules/prefer-in-document.js @@ -44,7 +44,8 @@ function usesToHaveLengthZero(matcherNode, matcherArguments) { } export const create = (context) => { - const alternativeMatchers = /^(toHaveLength|toBeDefined|toBeNull|toBe|toEqual|toBeTruthy|toBeFalsy)$/; + const alternativeMatchers = + /^(toHaveLength|toBeDefined|toBeNull|toBe|toEqual|toBeTruthy|toBeFalsy)$/; function getLengthValue(matcherArguments) { let lengthValue; @@ -216,6 +217,11 @@ export const create = (context) => { node ) { const arg = node.callee.object.arguments[0]; + + if (!arg) { + return; + } + const queryNode = arg.type === "AwaitExpression" ? arg.argument.callee : arg.callee; const matcherNode = node.callee.property;