eslint-plugin-jest
Version:
ESLint rules for Jest
67 lines (66 loc) • 2.15 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _utils = require("@typescript-eslint/utils");
var _utils2 = require("./utils");
const findModuleName = node => {
if (node.type === _utils.AST_NODE_TYPES.Literal && typeof node.value === 'string') {
return node;
}
return null;
};
var _default = exports.default = (0, _utils2.createRule)({
name: __filename,
meta: {
docs: {
description: 'Disallow using `jest.mock()` factories without an explicit type parameter'
},
messages: {
addTypeParameterToModuleMock: 'Add a type parameter to the mock factory such as `typeof import({{ moduleName }})`'
},
fixable: 'code',
schema: [],
type: 'suggestion'
},
defaultOptions: [],
create(context) {
return {
CallExpression(node) {
const {
callee,
typeArguments
} = node;
if (callee.type !== _utils.AST_NODE_TYPES.MemberExpression) {
return;
}
const {
property
} = callee;
if (node.arguments.length === 2 && (0, _utils2.isTypeOfJestFnCall)(node, context, ['jest']) && (0, _utils2.isSupportedAccessor)(property) && ['mock', 'doMock'].includes((0, _utils2.getAccessorValue)(property))) {
const [nameNode, factoryNode] = node.arguments;
const hasTypeParameter = typeArguments !== undefined && typeArguments.params.length > 0;
const hasReturnType = (0, _utils2.isFunction)(factoryNode) && factoryNode.returnType !== undefined;
if (hasTypeParameter || hasReturnType) {
return;
}
const moduleName = findModuleName(nameNode);
context.report({
messageId: 'addTypeParameterToModuleMock',
data: {
moduleName: moduleName?.raw ?? './module-name'
},
node,
fix(fixer) {
if (!moduleName) {
return [];
}
return [fixer.insertTextAfter(callee, `<typeof import(${moduleName.raw})>`)];
}
});
}
}
};
}
});
;