diff --git a/src/rules/__tests__/no-try-expect.test.js b/src/rules/__tests__/no-try-expect.test.ts similarity index 78% rename from src/rules/__tests__/no-try-expect.test.js rename to src/rules/__tests__/no-try-expect.test.ts index f8409ed23..a9d1eeb76 100644 --- a/src/rules/__tests__/no-try-expect.test.js +++ b/src/rules/__tests__/no-try-expect.test.ts @@ -1,11 +1,14 @@ -import { RuleTester } from 'eslint'; +import { TSESLint } from '@typescript-eslint/experimental-utils'; import rule from '../no-try-expect'; -const ruleTester = new RuleTester({ - parserOptions: { - ecmaVersion: 2019, +const ruleTester = new TSESLint.RuleTester( + // @ts-ignore: https://github.com/typescript-eslint/typescript-eslint/pull/746 + { + parserOptions: { + ecmaVersion: 2019, + }, }, -}); +); ruleTester.run('no-try-catch', rule, { valid: [ diff --git a/src/rules/no-try-expect.js b/src/rules/no-try-expect.ts similarity index 71% rename from src/rules/no-try-expect.js rename to src/rules/no-try-expect.ts index aa3a424fa..97a0c0f92 100644 --- a/src/rules/no-try-expect.js +++ b/src/rules/no-try-expect.ts @@ -1,10 +1,13 @@ -import { getDocsUrl, isTestCase } from './util'; +import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { createRule, isExpectCall, isTestCase } from './tsUtils'; -export default { +export default createRule({ + name: __filename, meta: { docs: { description: 'Prefer using toThrow for exception tests', - uri: getDocsUrl(__filename), + category: 'Best Practices', + recommended: false, }, messages: { noTryExpect: [ @@ -13,13 +16,16 @@ export default { 'or "await expect(yourFunction()).rejects.toThrow()" for async tests', ].join(' '), }, + type: 'problem', + schema: [], }, + defaultOptions: [], create(context) { let isTest = false; let catchDepth = 0; - function isThrowExpectCall(node) { - return catchDepth > 0 && node.callee.name === 'expect'; + function isThrowExpectCall(node: TSESTree.CallExpression) { + return catchDepth > 0 && isExpectCall(node); } return { @@ -50,4 +56,4 @@ export default { }, }; }, -}; +}); diff --git a/src/rules/tsUtils.ts b/src/rules/tsUtils.ts index c2a79a1fb..f8fabb850 100644 --- a/src/rules/tsUtils.ts +++ b/src/rules/tsUtils.ts @@ -59,7 +59,9 @@ interface JestExpectNamespaceMemberExpression * * @return {node is JestExpectCallExpression} */ -const isExpectCall = (node: TSESTree.Node): node is JestExpectCallExpression => +export const isExpectCall = ( + node: TSESTree.Node, +): node is JestExpectCallExpression => node.type === AST_NODE_TYPES.CallExpression && isExpectIdentifier(node.callee);