From 64ec9c10b0b67a19893e09f4462d5b1a1e984baf Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Mon, 29 Aug 2022 08:52:10 +1200 Subject: [PATCH] fix(prefer-expect-assertions): report on concise arrow functions with `expect` call (#1225) --- .../prefer-expect-assertions.test.ts | 22 +++++++++++++++++++ src/rules/prefer-expect-assertions.ts | 11 +++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/rules/__tests__/prefer-expect-assertions.test.ts b/src/rules/__tests__/prefer-expect-assertions.test.ts index 6b5a4e207..40379e11d 100644 --- a/src/rules/__tests__/prefer-expect-assertions.test.ts +++ b/src/rules/__tests__/prefer-expect-assertions.test.ts @@ -115,6 +115,28 @@ ruleTester.run('prefer-expect-assertions', rule, { }, ], }, + { + code: "it('resolves', () => expect(staged()).toBe(true));", + errors: [ + { + messageId: 'haveExpectAssertions', + column: 1, + line: 1, + suggestions: null, + }, + ], + }, + { + code: "it('resolves', async () => expect(await staged()).toBe(true));", + errors: [ + { + messageId: 'haveExpectAssertions', + column: 1, + line: 1, + suggestions: null, + }, + ], + }, { code: 'it("it1", () => {})', errors: [ diff --git a/src/rules/prefer-expect-assertions.ts b/src/rules/prefer-expect-assertions.ts index 091b16102..4c1193b8f 100644 --- a/src/rules/prefer-expect-assertions.ts +++ b/src/rules/prefer-expect-assertions.ts @@ -16,6 +16,12 @@ const isFirstStatement = (node: TSESTree.CallExpression): boolean => { return parent.parent.body[0] === parent; } + // if we've hit an arrow function, then it must have a single expression + // as its body, as otherwise we would have hit the block statement already + if (parent.parent?.type === AST_NODE_TYPES.ArrowFunctionExpression) { + return true; + } + parent = parent.parent; } @@ -52,11 +58,6 @@ type MessageIds = | 'suggestAddingAssertions' | 'suggestRemovingExtraArguments'; -// const suggestions: Array<[MessageIds, string]> = [ -// ['suggestAddingHasAssertions', 'expect.hasAssertions();'], -// ['suggestAddingAssertions', 'expect.assertions();'], -// ]; - export default createRule<[RuleOptions], MessageIds>({ name: __filename, meta: {