From 501de4ac3adac16c703b3e9e631daeaa3003db4c Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Tue, 23 Jul 2019 19:58:34 +1000 Subject: [PATCH] chore(no-try-expect): migrate to TS (#344) --- ...ry-expect.test.js => no-try-expect.test.ts} | 13 ++++++++----- .../{no-try-expect.js => no-try-expect.ts} | 18 ++++++++++++------ src/rules/tsUtils.ts | 4 +++- 3 files changed, 23 insertions(+), 12 deletions(-) rename src/rules/__tests__/{no-try-expect.test.js => no-try-expect.test.ts} (78%) rename src/rules/{no-try-expect.js => no-try-expect.ts} (71%) 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);