eslint-plugin-jest
Advanced tools
Comparing version 26.8.4 to 26.8.5
@@ -12,6 +12,20 @@ "use strict"; | ||
const isExpectAssertionsOrHasAssertionsCall = expression => expression.type === _utils.AST_NODE_TYPES.CallExpression && expression.callee.type === _utils.AST_NODE_TYPES.MemberExpression && (0, _utils2.isSupportedAccessor)(expression.callee.object, 'expect') && (0, _utils2.isSupportedAccessor)(expression.callee.property) && ['assertions', 'hasAssertions'].includes((0, _utils2.getAccessorValue)(expression.callee.property)); | ||
const isFirstStatement = node => { | ||
let parent = node; | ||
const isFirstLineExprStmt = functionBody => functionBody[0] && functionBody[0].type === _utils.AST_NODE_TYPES.ExpressionStatement; | ||
while (parent) { | ||
var _parent$parent; | ||
if (((_parent$parent = parent.parent) === null || _parent$parent === void 0 ? void 0 : _parent$parent.type) === _utils.AST_NODE_TYPES.BlockStatement) { | ||
return parent.parent.body[0] === parent; | ||
} | ||
parent = parent.parent; | ||
} | ||
/* istanbul ignore next */ | ||
throw new Error(`Could not find BlockStatement - please file a github issue at https://github.com/jest-community/eslint-plugin-jest`); | ||
}; | ||
const suggestRemovingExtraArguments = (args, extraArgsStartAt) => ({ | ||
@@ -70,2 +84,3 @@ messageId: 'suggestRemovingExtraArguments', | ||
let hasExpectInLoop = false; | ||
let hasExpectAssertionsAsFirstStatement = false; | ||
let inTestCaseCall = false; | ||
@@ -100,2 +115,46 @@ let inForLoop = false; | ||
const checkExpectHasAssertions = expectFnCall => { | ||
if ((0, _utils2.getAccessorValue)(expectFnCall.members[0]) === 'hasAssertions') { | ||
if (expectFnCall.args.length) { | ||
context.report({ | ||
messageId: 'hasAssertionsTakesNoArguments', | ||
node: expectFnCall.matcher, | ||
suggest: [suggestRemovingExtraArguments(expectFnCall.args, 0)] | ||
}); | ||
} | ||
return; | ||
} | ||
if (expectFnCall.args.length !== 1) { | ||
let { | ||
loc | ||
} = expectFnCall.matcher; | ||
const suggest = []; | ||
if (expectFnCall.args.length) { | ||
loc = expectFnCall.args[1].loc; | ||
suggest.push(suggestRemovingExtraArguments(expectFnCall.args, 1)); | ||
} | ||
context.report({ | ||
messageId: 'assertionsRequiresOneArgument', | ||
suggest, | ||
loc | ||
}); | ||
return; | ||
} | ||
const [arg] = expectFnCall.args; | ||
if (arg.type === _utils.AST_NODE_TYPES.Literal && typeof arg.value === 'number' && Number.isInteger(arg.value)) { | ||
return; | ||
} | ||
context.report({ | ||
messageId: 'assertionsRequiresNumberArgument', | ||
node: arg | ||
}); | ||
}; | ||
const enterExpression = () => inTestCaseCall && expressionDepth++; | ||
@@ -130,2 +189,9 @@ | ||
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'expect' && inTestCaseCall) { | ||
var _jestFnCall$head$node; | ||
if (expressionDepth === 1 && isFirstStatement(node) && ((_jestFnCall$head$node = jestFnCall.head.node.parent) === null || _jestFnCall$head$node === void 0 ? void 0 : _jestFnCall$head$node.type) === _utils.AST_NODE_TYPES.MemberExpression && jestFnCall.members.length === 1 && ['assertions', 'hasAssertions'].includes((0, _utils2.getAccessorValue)(jestFnCall.members[0]))) { | ||
checkExpectHasAssertions(jestFnCall); | ||
hasExpectAssertionsAsFirstStatement = true; | ||
} | ||
if (inForLoop) { | ||
@@ -164,70 +230,15 @@ hasExpectInLoop = true; | ||
hasExpectInCallback = false; | ||
const testFuncBody = testFn.body.body; | ||
if (!isFirstLineExprStmt(testFuncBody)) { | ||
context.report({ | ||
messageId: 'haveExpectAssertions', | ||
node, | ||
suggest: suggestions.map(([messageId, text]) => ({ | ||
messageId, | ||
fix: fixer => fixer.insertTextBeforeRange([testFn.body.range[0] + 1, testFn.body.range[1]], text) | ||
})) | ||
}); | ||
if (hasExpectAssertionsAsFirstStatement) { | ||
hasExpectAssertionsAsFirstStatement = false; | ||
return; | ||
} | ||
const testFuncFirstLine = testFuncBody[0].expression; | ||
if (!isExpectAssertionsOrHasAssertionsCall(testFuncFirstLine)) { | ||
context.report({ | ||
messageId: 'haveExpectAssertions', | ||
node, | ||
suggest: suggestions.map(([messageId, text]) => ({ | ||
messageId, | ||
fix: fixer => fixer.insertTextBefore(testFuncBody[0], text) | ||
})) | ||
}); | ||
return; | ||
} | ||
if ((0, _utils2.isSupportedAccessor)(testFuncFirstLine.callee.property, 'hasAssertions')) { | ||
if (testFuncFirstLine.arguments.length) { | ||
context.report({ | ||
messageId: 'hasAssertionsTakesNoArguments', | ||
node: testFuncFirstLine.callee.property, | ||
suggest: [suggestRemovingExtraArguments(testFuncFirstLine.arguments, 0)] | ||
}); | ||
} | ||
return; | ||
} | ||
if (!(0, _utils2.hasOnlyOneArgument)(testFuncFirstLine)) { | ||
let { | ||
loc | ||
} = testFuncFirstLine.callee.property; | ||
const suggest = []; | ||
if (testFuncFirstLine.arguments.length) { | ||
loc = testFuncFirstLine.arguments[1].loc; | ||
suggest.push(suggestRemovingExtraArguments(testFuncFirstLine.arguments, 1)); | ||
} | ||
context.report({ | ||
messageId: 'assertionsRequiresOneArgument', | ||
suggest, | ||
loc | ||
}); | ||
return; | ||
} | ||
const [arg] = testFuncFirstLine.arguments; | ||
if (arg.type === _utils.AST_NODE_TYPES.Literal && typeof arg.value === 'number' && Number.isInteger(arg.value)) { | ||
return; | ||
} | ||
context.report({ | ||
messageId: 'assertionsRequiresNumberArgument', | ||
node: arg | ||
messageId: 'haveExpectAssertions', | ||
node, | ||
suggest: suggestions.map(([messageId, text]) => ({ | ||
messageId, | ||
fix: fixer => fixer.insertTextBeforeRange([testFn.body.range[0] + 1, testFn.body.range[1]], text) | ||
})) | ||
}); | ||
@@ -234,0 +245,0 @@ } |
{ | ||
"name": "eslint-plugin-jest", | ||
"version": "26.8.4", | ||
"version": "26.8.5", | ||
"description": "ESLint rules for Jest", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -285,2 +285,10 @@ <div align="center"> | ||
### eslint-plugin-jest-extended | ||
This is a sister plugin to `eslint-plugin-jest` that provides support for the | ||
matchers provided by | ||
[`jest-extended`](https://github.com/jest-community/jest-extended). | ||
https://github.com/jest-community/eslint-plugin-jest-extended | ||
### eslint-plugin-jest-formatting | ||
@@ -287,0 +295,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
298496
5145
312