UNPKG

eslint-plugin-jest

Version:
59 lines (58 loc) 1.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _utils = require("@typescript-eslint/utils"); var _utils2 = require("./utils"); var _default = exports.default = (0, _utils2.createRule)({ name: __filename, meta: { docs: { description: 'Suggest using `toHaveBeenCalled`' }, messages: { preferMatcher: 'Use `toHaveBeenCalled`' }, fixable: 'code', type: 'suggestion', schema: [] }, defaultOptions: [], create(context) { return { CallExpression(node) { const jestFnCall = (0, _utils2.parseJestFnCall)(node, context); if (jestFnCall?.type !== 'expect') { return; } const { matcher } = jestFnCall; if (!['toBeCalledTimes', 'toHaveBeenCalledTimes'].includes((0, _utils2.getAccessorValue)(matcher))) { return; } const arg = (0, _utils2.getFirstMatcherArg)(jestFnCall); if (arg.type !== _utils.AST_NODE_TYPES.Literal || arg.value !== 0) { return; } const notModifier = jestFnCall.modifiers.find(nod => (0, _utils2.getAccessorValue)(nod) === 'not'); context.report({ messageId: 'preferMatcher', node: matcher, fix(fixer) { let replacementMatcher = '.not.toHaveBeenCalled'; if (notModifier) { replacementMatcher = '.toHaveBeenCalled'; } return [ // remove all the arguments to the matcher fixer.removeRange([jestFnCall.args[0].range[0], jestFnCall.args[jestFnCall.args.length - 1].range[1]]), // replace the current matcher with "(.not).toHaveBeenCalled" fixer.replaceTextRange([(notModifier || matcher).parent.object.range[1], jestFnCall.matcher.parent.range[1]], replacementMatcher)]; } }); } }; } });