diff --git a/docs/rules/expect-expect.md b/docs/rules/expect-expect.md index 6ba708903..258114cad 100644 --- a/docs/rules/expect-expect.md +++ b/docs/rules/expect-expect.md @@ -75,3 +75,24 @@ test('returns sum', () => .run(); ); ``` + +Examples of **correct** code for working with the HTTP assertions library +[SuperTest](https://www.npmjs.com/package/supertest) with the +`{ "assertFunctionNames": ["expect", "request.get.expect"] }` option: + +```js +/* eslint jest/expect-expect: ["error", { "assertFunctionNames": ["expect", "request.get.expect"] }] */ +const request = require('supertest'); +const express = require('express'); + +const app = express(); + +describe('GET /user', function() { + it('responds with json', function(done) { + request(app) + .get('/user') + .expect('Content-Type', /json/) + .expect(200, done); + }); +}); +``` diff --git a/src/rules/__tests__/expect-expect.test.ts b/src/rules/__tests__/expect-expect.test.ts index 3ef7ed9a8..209a48505 100644 --- a/src/rules/__tests__/expect-expect.test.ts +++ b/src/rules/__tests__/expect-expect.test.ts @@ -26,6 +26,52 @@ 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 recursive expect method call', () => { + class Foo { + expect(k) { + return this; + } + bar() { + return this; + } + } + let tester = { + foo: function() { + return new Foo() + } + } + tester.foo().bar().expect(456); + });`, + options: [{ assertFunctionNames: ['tester.foo.bar.expect'] }], + }, { code: [ 'test("verifies the function call", () => {', diff --git a/src/rules/__tests__/no-jasmine-globals.test.ts b/src/rules/__tests__/no-jasmine-globals.test.ts index 254c62d30..abfc0aa4e 100644 --- a/src/rules/__tests__/no-jasmine-globals.test.ts +++ b/src/rules/__tests__/no-jasmine-globals.test.ts @@ -13,6 +13,7 @@ ruleTester.run('no-jasmine-globals', rule, { 'test("foo", function () {})', 'foo()', `require('foo')('bar')`, + '(function(){})()', 'function callback(fail) { fail() }', 'var spyOn = require("actions"); spyOn("foo")', 'function callback(pending) { pending() }', 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;