diff --git a/docs/rules/expect-expect.md b/docs/rules/expect-expect.md index 6ba708903..b6ea9c1e6 100644 --- a/docs/rules/expect-expect.md +++ b/docs/rules/expect-expect.md @@ -75,3 +75,23 @@ test('returns sum', () => .run(); ); ``` + +Examples of **correct** code for deep assertion functions with the +`{ "assertFunctionNames": ["expect", "tester.foo.expect"] }` option: + +```js +/* eslint jest/expect-expect: ["error", { "assertFunctionNames": ["expect", "tester.foo.expect"] }] */ +test('nested expect method call', () => { + class Foo { + expect(k) { + return k; + } + } + let tester = { + foo: function() { + return new Foo(); + }, + }; + tester.foo().expect(123); +}); +``` diff --git a/src/rules/__tests__/expect-expect.test.ts b/src/rules/__tests__/expect-expect.test.ts index 3ef7ed9a8..5513329ac 100644 --- a/src/rules/__tests__/expect-expect.test.ts +++ b/src/rules/__tests__/expect-expect.test.ts @@ -26,6 +26,33 @@ ruleTester.run('expect-expect', rule, { code: 'it("should return undefined",() => expectSaga(mySaga).returns());', options: [{ assertFunctionNames: ['expectSaga'] }], }, + { + code: `test('verifies expect method call', () => { + class Foo { + expect(k) { + return k; + } + } + new Foo().expect(123); + });`, + options: [{ assertFunctionNames: ['Foo.expect'] }], + }, + { + code: `test('verifies deep expect method call', () => { + class Foo { + expect(k) { + return k; + } + } + let tester = { + foo: function() { + return new Foo() + } + } + tester.foo().expect(123); + });`, + options: [{ assertFunctionNames: ['tester.foo.expect'] }], + }, { code: [ 'test("verifies the function call", () => {', diff --git a/src/rules/utils.ts b/src/rules/utils.ts index 9cc2e7a03..c5b0a6eee 100644 --- a/src/rules/utils.ts +++ b/src/rules/utils.ts @@ -614,6 +614,10 @@ export function getNodeName(node: TSESTree.Node): string | null { break; case AST_NODE_TYPES.MemberExpression: return joinNames(getNodeName(node.object), getNodeName(node.property)); + case AST_NODE_TYPES.NewExpression: + return getNodeName(node.callee); + case AST_NODE_TYPES.CallExpression: + return getNodeName(node.callee); } return null;