eslint-plugin-jest 27.1.1 → 27.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +8 -16
- package/lib/processors/snapshot-processor.js +3 -5
- package/lib/rules/consistent-test-it.js +0 -18
- package/lib/rules/expect-expect.js +0 -15
- package/lib/rules/max-expects.js +0 -16
- package/lib/rules/max-nested-describe.js +0 -13
- package/lib/rules/no-alias-methods.js +0 -9
- package/lib/rules/no-commented-out-tests.js +0 -10
- package/lib/rules/no-conditional-expect.js +0 -19
- package/lib/rules/no-conditional-in-test.js +0 -9
- package/lib/rules/no-deprecated-functions.js +2 -18
- package/lib/rules/no-disabled-tests.js +2 -18
- package/lib/rules/no-done-callback.js +1 -30
- package/lib/rules/no-duplicate-hooks.js +0 -12
- package/lib/rules/no-export.js +0 -12
- package/lib/rules/no-focused-tests.js +0 -15
- package/lib/rules/no-hooks.js +0 -7
- package/lib/rules/no-identical-title.js +0 -19
- package/lib/rules/no-if.js +0 -24
- package/lib/rules/no-interpolation-in-snapshots.js +0 -9
- package/lib/rules/no-jasmine-globals.js +0 -22
- package/lib/rules/no-large-snapshots.js +2 -20
- package/lib/rules/no-mocks-import.js +0 -12
- package/lib/rules/no-restricted-jest-methods.js +1 -11
- package/lib/rules/no-restricted-matchers.js +0 -11
- package/lib/rules/no-standalone-expect.js +7 -33
- package/lib/rules/no-test-prefixes.js +0 -12
- package/lib/rules/no-test-return-statement.js +0 -12
- package/lib/rules/prefer-called-with.js +0 -10
- package/lib/rules/prefer-comparison-matcher.js +8 -33
- package/lib/rules/prefer-each.js +0 -18
- package/lib/rules/prefer-equality-matcher.js +11 -23
- package/lib/rules/prefer-expect-assertions.js +4 -51
- package/lib/rules/prefer-expect-resolves.js +0 -12
- package/lib/rules/prefer-hooks-in-order.js +2 -16
- package/lib/rules/prefer-hooks-on-top.js +0 -9
- package/lib/rules/prefer-lowercase-title.js +0 -23
- package/lib/rules/prefer-mock-promise-shorthand.js +5 -26
- package/lib/rules/prefer-snapshot-hint.js +7 -31
- package/lib/rules/prefer-spy-on.js +0 -17
- package/lib/rules/prefer-strict-equal.js +0 -9
- package/lib/rules/prefer-to-be.js +1 -30
- package/lib/rules/prefer-to-contain.js +11 -21
- package/lib/rules/prefer-to-have-length.js +4 -16
- package/lib/rules/prefer-todo.js +2 -18
- package/lib/rules/require-hook.js +0 -22
- package/lib/rules/require-to-throw-message.js +0 -9
- package/lib/rules/require-top-level-describe.js +0 -15
- package/lib/rules/unbound-method.js +2 -21
- package/lib/rules/utils/accessors.js +6 -18
- package/lib/rules/utils/detectJestVersion.js +2 -7
- package/lib/rules/utils/followTypeAssertionChain.js +0 -4
- package/lib/rules/utils/index.js +0 -10
- package/lib/rules/utils/misc.js +2 -46
- package/lib/rules/utils/parseJestFnCall.js +39 -114
- package/lib/rules/valid-describe-callback.js +0 -17
- package/lib/rules/valid-expect-in-promise.js +27 -94
- package/lib/rules/valid-expect.js +5 -48
- package/lib/rules/valid-title.js +0 -33
- package/package.json +2 -2
package/lib/index.js
CHANGED
|
@@ -1,41 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _fs = require("fs");
|
|
4
|
-
|
|
5
4
|
var _path = require("path");
|
|
6
|
-
|
|
7
5
|
var _globals = _interopRequireDefault(require("./globals.json"));
|
|
8
|
-
|
|
9
6
|
var snapshotProcessor = _interopRequireWildcard(require("./processors/snapshot-processor"));
|
|
10
|
-
|
|
11
7
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
|
-
|
|
13
8
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
14
|
-
|
|
15
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
-
|
|
17
10
|
// copied from https://github.com/babel/babel/blob/d8da63c929f2d28c401571e2a43166678c555bc4/packages/babel-helpers/src/helpers.js#L602-L606
|
|
18
|
-
|
|
19
11
|
/* istanbul ignore next */
|
|
20
12
|
const interopRequireDefault = obj => obj && obj.__esModule ? obj : {
|
|
21
13
|
default: obj
|
|
22
14
|
};
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
const importDefault = moduleName =>
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
25
17
|
interopRequireDefault(require(moduleName)).default;
|
|
26
|
-
|
|
27
18
|
const rulesDir = (0, _path.join)(__dirname, 'rules');
|
|
28
19
|
const excludedFiles = ['__tests__', 'detectJestVersion', 'utils'];
|
|
29
|
-
const rules = (0, _fs.readdirSync)(rulesDir).map(rule => (0, _path.parse)(rule).name).filter(rule => !excludedFiles.includes(rule)).reduce((acc, curr) => ({
|
|
20
|
+
const rules = (0, _fs.readdirSync)(rulesDir).map(rule => (0, _path.parse)(rule).name).filter(rule => !excludedFiles.includes(rule)).reduce((acc, curr) => ({
|
|
21
|
+
...acc,
|
|
30
22
|
[curr]: importDefault((0, _path.join)(rulesDir, curr))
|
|
31
23
|
}), {});
|
|
32
|
-
const recommendedRules = Object.entries(rules).filter(([, rule]) => rule.meta.docs.recommended).reduce((acc, [name, rule]) => ({
|
|
24
|
+
const recommendedRules = Object.entries(rules).filter(([, rule]) => rule.meta.docs.recommended).reduce((acc, [name, rule]) => ({
|
|
25
|
+
...acc,
|
|
33
26
|
[`jest/${name}`]: rule.meta.docs.recommended
|
|
34
27
|
}), {});
|
|
35
|
-
const allRules = Object.entries(rules).filter(([, rule]) => !rule.meta.deprecated).reduce((acc, [name]) => ({
|
|
28
|
+
const allRules = Object.entries(rules).filter(([, rule]) => !rule.meta.deprecated).reduce((acc, [name]) => ({
|
|
29
|
+
...acc,
|
|
36
30
|
[`jest/${name}`]: 'error'
|
|
37
31
|
}), {});
|
|
38
|
-
|
|
39
32
|
const createConfig = rules => ({
|
|
40
33
|
plugins: ['jest'],
|
|
41
34
|
env: {
|
|
@@ -43,7 +36,6 @@ const createConfig = rules => ({
|
|
|
43
36
|
},
|
|
44
37
|
rules
|
|
45
38
|
});
|
|
46
|
-
|
|
47
39
|
module.exports = {
|
|
48
40
|
configs: {
|
|
49
41
|
all: createConfig(allRules),
|
|
@@ -4,14 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.preprocess = exports.postprocess = void 0;
|
|
7
|
-
|
|
8
7
|
// https://eslint.org/docs/developer-guide/working-with-plugins#processors-in-plugins
|
|
9
8
|
// https://github.com/typescript-eslint/typescript-eslint/issues/808
|
|
10
|
-
const preprocess = source => [source];
|
|
11
9
|
|
|
10
|
+
const preprocess = source => [source];
|
|
12
11
|
exports.preprocess = preprocess;
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const postprocess = messages =>
|
|
13
|
+
// snapshot files should only be linted with snapshot specific rules
|
|
15
14
|
messages[0].filter(message => message.ruleId === 'jest/no-large-snapshots');
|
|
16
|
-
|
|
17
15
|
exports.postprocess = postprocess;
|
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _utils = require("@typescript-eslint/utils");
|
|
9
|
-
|
|
10
8
|
var _utils2 = require("./utils");
|
|
11
|
-
|
|
12
9
|
const buildFixer = (callee, nodeName, preferredTestKeyword) => fixer => [fixer.replaceText(callee.type === _utils.AST_NODE_TYPES.MemberExpression ? callee.object : callee, getPreferredNodeName(nodeName, preferredTestKeyword))];
|
|
13
|
-
|
|
14
10
|
var _default = (0, _utils2.createRule)({
|
|
15
11
|
name: __filename,
|
|
16
12
|
meta: {
|
|
@@ -42,7 +38,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
42
38
|
fn: _utils2.TestCaseName.test,
|
|
43
39
|
withinDescribe: _utils2.TestCaseName.it
|
|
44
40
|
}],
|
|
45
|
-
|
|
46
41
|
create(context) {
|
|
47
42
|
const configObj = context.options[0] || {};
|
|
48
43
|
const testKeyword = configObj.fn || _utils2.TestCaseName.test;
|
|
@@ -51,18 +46,14 @@ var _default = (0, _utils2.createRule)({
|
|
|
51
46
|
return {
|
|
52
47
|
CallExpression(node) {
|
|
53
48
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
54
|
-
|
|
55
49
|
if (!jestFnCall) {
|
|
56
50
|
return;
|
|
57
51
|
}
|
|
58
|
-
|
|
59
52
|
if (jestFnCall.type === 'describe') {
|
|
60
53
|
describeNestingLevel++;
|
|
61
54
|
return;
|
|
62
55
|
}
|
|
63
|
-
|
|
64
56
|
const funcNode = node.callee.type === _utils.AST_NODE_TYPES.TaggedTemplateExpression ? node.callee.tag : node.callee.type === _utils.AST_NODE_TYPES.CallExpression ? node.callee.callee : node.callee;
|
|
65
|
-
|
|
66
57
|
if (jestFnCall.type === 'test' && describeNestingLevel === 0 && !jestFnCall.name.endsWith(testKeyword)) {
|
|
67
58
|
const oppositeTestKeyword = getOppositeTestKeyword(testKeyword);
|
|
68
59
|
context.report({
|
|
@@ -75,7 +66,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
75
66
|
fix: buildFixer(funcNode, jestFnCall.name, testKeyword)
|
|
76
67
|
});
|
|
77
68
|
}
|
|
78
|
-
|
|
79
69
|
if (jestFnCall.type === 'test' && describeNestingLevel > 0 && !jestFnCall.name.endsWith(testKeywordWithinDescribe)) {
|
|
80
70
|
const oppositeTestKeyword = getOppositeTestKeyword(testKeywordWithinDescribe);
|
|
81
71
|
context.report({
|
|
@@ -89,32 +79,24 @@ var _default = (0, _utils2.createRule)({
|
|
|
89
79
|
});
|
|
90
80
|
}
|
|
91
81
|
},
|
|
92
|
-
|
|
93
82
|
'CallExpression:exit'(node) {
|
|
94
83
|
if ((0, _utils2.isTypeOfJestFnCall)(node, context, ['describe'])) {
|
|
95
84
|
describeNestingLevel--;
|
|
96
85
|
}
|
|
97
86
|
}
|
|
98
|
-
|
|
99
87
|
};
|
|
100
88
|
}
|
|
101
|
-
|
|
102
89
|
});
|
|
103
|
-
|
|
104
90
|
exports.default = _default;
|
|
105
|
-
|
|
106
91
|
function getPreferredNodeName(nodeName, preferredTestKeyword) {
|
|
107
92
|
if (nodeName === _utils2.TestCaseName.fit) {
|
|
108
93
|
return 'test.only';
|
|
109
94
|
}
|
|
110
|
-
|
|
111
95
|
return nodeName.startsWith('f') || nodeName.startsWith('x') ? nodeName.charAt(0) + preferredTestKeyword : preferredTestKeyword;
|
|
112
96
|
}
|
|
113
|
-
|
|
114
97
|
function getOppositeTestKeyword(test) {
|
|
115
98
|
if (test === _utils2.TestCaseName.test) {
|
|
116
99
|
return _utils2.TestCaseName.it;
|
|
117
100
|
}
|
|
118
|
-
|
|
119
101
|
return _utils2.TestCaseName.test;
|
|
120
102
|
}
|
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _utils = require("@typescript-eslint/utils");
|
|
9
|
-
|
|
10
8
|
var _utils2 = require("./utils");
|
|
11
|
-
|
|
12
9
|
/*
|
|
13
10
|
* This implementation is adapted from eslint-plugin-jasmine.
|
|
14
11
|
* MIT license, Remco Haszing.
|
|
@@ -27,7 +24,6 @@ function matchesAssertFunctionName(nodeName, patterns) {
|
|
|
27
24
|
return x.replace(/\*/gu, '[a-z\\d]*');
|
|
28
25
|
}).join('\\.')}(\\.|$)`, 'ui').test(nodeName));
|
|
29
26
|
}
|
|
30
|
-
|
|
31
27
|
var _default = (0, _utils2.createRule)({
|
|
32
28
|
name: __filename,
|
|
33
29
|
meta: {
|
|
@@ -63,56 +59,45 @@ var _default = (0, _utils2.createRule)({
|
|
|
63
59
|
assertFunctionNames: ['expect'],
|
|
64
60
|
additionalTestBlockFunctions: []
|
|
65
61
|
}],
|
|
66
|
-
|
|
67
62
|
create(context, [{
|
|
68
63
|
assertFunctionNames = ['expect'],
|
|
69
64
|
additionalTestBlockFunctions = []
|
|
70
65
|
}]) {
|
|
71
66
|
const unchecked = [];
|
|
72
|
-
|
|
73
67
|
function checkCallExpressionUsed(nodes) {
|
|
74
68
|
for (const node of nodes) {
|
|
75
69
|
const index = node.type === _utils.AST_NODE_TYPES.CallExpression ? unchecked.indexOf(node) : -1;
|
|
76
|
-
|
|
77
70
|
if (node.type === _utils.AST_NODE_TYPES.FunctionDeclaration) {
|
|
78
71
|
const declaredVariables = context.getDeclaredVariables(node);
|
|
79
72
|
const testCallExpressions = (0, _utils2.getTestCallExpressionsFromDeclaredVariables)(declaredVariables, context);
|
|
80
73
|
checkCallExpressionUsed(testCallExpressions);
|
|
81
74
|
}
|
|
82
|
-
|
|
83
75
|
if (index !== -1) {
|
|
84
76
|
unchecked.splice(index, 1);
|
|
85
77
|
break;
|
|
86
78
|
}
|
|
87
79
|
}
|
|
88
80
|
}
|
|
89
|
-
|
|
90
81
|
return {
|
|
91
82
|
CallExpression(node) {
|
|
92
83
|
const name = (0, _utils2.getNodeName)(node.callee) ?? '';
|
|
93
|
-
|
|
94
84
|
if ((0, _utils2.isTypeOfJestFnCall)(node, context, ['test']) || additionalTestBlockFunctions.includes(name)) {
|
|
95
85
|
if (node.callee.type === _utils.AST_NODE_TYPES.MemberExpression && (0, _utils2.isSupportedAccessor)(node.callee.property, 'todo')) {
|
|
96
86
|
return;
|
|
97
87
|
}
|
|
98
|
-
|
|
99
88
|
unchecked.push(node);
|
|
100
89
|
} else if (matchesAssertFunctionName(name, assertFunctionNames)) {
|
|
101
90
|
// Return early in case of nested `it` statements.
|
|
102
91
|
checkCallExpressionUsed(context.getAncestors());
|
|
103
92
|
}
|
|
104
93
|
},
|
|
105
|
-
|
|
106
94
|
'Program:exit'() {
|
|
107
95
|
unchecked.forEach(node => context.report({
|
|
108
96
|
messageId: 'noAssertions',
|
|
109
97
|
node
|
|
110
98
|
}));
|
|
111
99
|
}
|
|
112
|
-
|
|
113
100
|
};
|
|
114
101
|
}
|
|
115
|
-
|
|
116
102
|
});
|
|
117
|
-
|
|
118
103
|
exports.default = _default;
|
package/lib/rules/max-expects.js
CHANGED
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _utils = require("@typescript-eslint/utils");
|
|
9
|
-
|
|
10
8
|
var _utils2 = require("./utils");
|
|
11
|
-
|
|
12
9
|
var _default = (0, _utils2.createRule)({
|
|
13
10
|
name: __filename,
|
|
14
11
|
meta: {
|
|
@@ -35,39 +32,29 @@ var _default = (0, _utils2.createRule)({
|
|
|
35
32
|
defaultOptions: [{
|
|
36
33
|
max: 5
|
|
37
34
|
}],
|
|
38
|
-
|
|
39
35
|
create(context, [{
|
|
40
36
|
max
|
|
41
37
|
}]) {
|
|
42
38
|
let count = 0;
|
|
43
|
-
|
|
44
39
|
const maybeResetCount = node => {
|
|
45
40
|
var _node$parent;
|
|
46
|
-
|
|
47
41
|
const isTestFn = ((_node$parent = node.parent) === null || _node$parent === void 0 ? void 0 : _node$parent.type) !== _utils.AST_NODE_TYPES.CallExpression || (0, _utils2.isTypeOfJestFnCall)(node.parent, context, ['test']);
|
|
48
|
-
|
|
49
42
|
if (isTestFn) {
|
|
50
43
|
count = 0;
|
|
51
44
|
}
|
|
52
45
|
};
|
|
53
|
-
|
|
54
46
|
return {
|
|
55
47
|
FunctionExpression: maybeResetCount,
|
|
56
48
|
'FunctionExpression:exit': maybeResetCount,
|
|
57
49
|
ArrowFunctionExpression: maybeResetCount,
|
|
58
50
|
'ArrowFunctionExpression:exit': maybeResetCount,
|
|
59
|
-
|
|
60
51
|
CallExpression(node) {
|
|
61
52
|
var _jestFnCall$head$node;
|
|
62
|
-
|
|
63
53
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
64
|
-
|
|
65
54
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'expect' || ((_jestFnCall$head$node = jestFnCall.head.node.parent) === null || _jestFnCall$head$node === void 0 ? void 0 : _jestFnCall$head$node.type) === _utils.AST_NODE_TYPES.MemberExpression) {
|
|
66
55
|
return;
|
|
67
56
|
}
|
|
68
|
-
|
|
69
57
|
count += 1;
|
|
70
|
-
|
|
71
58
|
if (count > max) {
|
|
72
59
|
context.report({
|
|
73
60
|
node,
|
|
@@ -79,10 +66,7 @@ var _default = (0, _utils2.createRule)({
|
|
|
79
66
|
});
|
|
80
67
|
}
|
|
81
68
|
}
|
|
82
|
-
|
|
83
69
|
};
|
|
84
70
|
}
|
|
85
|
-
|
|
86
71
|
});
|
|
87
|
-
|
|
88
72
|
exports.default = _default;
|
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _utils = require("@typescript-eslint/utils");
|
|
9
|
-
|
|
10
8
|
var _utils2 = require("./utils");
|
|
11
|
-
|
|
12
9
|
var _default = (0, _utils2.createRule)({
|
|
13
10
|
name: __filename,
|
|
14
11
|
meta: {
|
|
@@ -35,23 +32,18 @@ var _default = (0, _utils2.createRule)({
|
|
|
35
32
|
defaultOptions: [{
|
|
36
33
|
max: 5
|
|
37
34
|
}],
|
|
38
|
-
|
|
39
35
|
create(context, [{
|
|
40
36
|
max
|
|
41
37
|
}]) {
|
|
42
38
|
const describeCallbackStack = [];
|
|
43
|
-
|
|
44
39
|
function pushDescribeCallback(node) {
|
|
45
40
|
const {
|
|
46
41
|
parent
|
|
47
42
|
} = node;
|
|
48
|
-
|
|
49
43
|
if ((parent === null || parent === void 0 ? void 0 : parent.type) !== _utils.AST_NODE_TYPES.CallExpression || !(0, _utils2.isTypeOfJestFnCall)(parent, context, ['describe'])) {
|
|
50
44
|
return;
|
|
51
45
|
}
|
|
52
|
-
|
|
53
46
|
describeCallbackStack.push(0);
|
|
54
|
-
|
|
55
47
|
if (describeCallbackStack.length > max) {
|
|
56
48
|
context.report({
|
|
57
49
|
node: parent,
|
|
@@ -63,17 +55,14 @@ var _default = (0, _utils2.createRule)({
|
|
|
63
55
|
});
|
|
64
56
|
}
|
|
65
57
|
}
|
|
66
|
-
|
|
67
58
|
function popDescribeCallback(node) {
|
|
68
59
|
const {
|
|
69
60
|
parent
|
|
70
61
|
} = node;
|
|
71
|
-
|
|
72
62
|
if ((parent === null || parent === void 0 ? void 0 : parent.type) === _utils.AST_NODE_TYPES.CallExpression && (0, _utils2.isTypeOfJestFnCall)(parent, context, ['describe'])) {
|
|
73
63
|
describeCallbackStack.pop();
|
|
74
64
|
}
|
|
75
65
|
}
|
|
76
|
-
|
|
77
66
|
return {
|
|
78
67
|
FunctionExpression: pushDescribeCallback,
|
|
79
68
|
'FunctionExpression:exit': popDescribeCallback,
|
|
@@ -81,7 +70,5 @@ var _default = (0, _utils2.createRule)({
|
|
|
81
70
|
'ArrowFunctionExpression:exit': popDescribeCallback
|
|
82
71
|
};
|
|
83
72
|
}
|
|
84
|
-
|
|
85
73
|
});
|
|
86
|
-
|
|
87
74
|
exports.default = _default;
|
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _utils = require("./utils");
|
|
9
|
-
|
|
10
8
|
var _default = (0, _utils.createRule)({
|
|
11
9
|
name: __filename,
|
|
12
10
|
meta: {
|
|
@@ -23,7 +21,6 @@ var _default = (0, _utils.createRule)({
|
|
|
23
21
|
schema: []
|
|
24
22
|
},
|
|
25
23
|
defaultOptions: [],
|
|
26
|
-
|
|
27
24
|
create(context) {
|
|
28
25
|
// map of jest matcher aliases & their canonical names
|
|
29
26
|
const methodNames = {
|
|
@@ -42,16 +39,13 @@ var _default = (0, _utils.createRule)({
|
|
|
42
39
|
return {
|
|
43
40
|
CallExpression(node) {
|
|
44
41
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
45
|
-
|
|
46
42
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'expect') {
|
|
47
43
|
return;
|
|
48
44
|
}
|
|
49
|
-
|
|
50
45
|
const {
|
|
51
46
|
matcher
|
|
52
47
|
} = jestFnCall;
|
|
53
48
|
const alias = (0, _utils.getAccessorValue)(matcher);
|
|
54
|
-
|
|
55
49
|
if (alias in methodNames) {
|
|
56
50
|
const canonical = methodNames[alias];
|
|
57
51
|
context.report({
|
|
@@ -65,10 +59,7 @@ var _default = (0, _utils.createRule)({
|
|
|
65
59
|
});
|
|
66
60
|
}
|
|
67
61
|
}
|
|
68
|
-
|
|
69
62
|
};
|
|
70
63
|
}
|
|
71
|
-
|
|
72
64
|
});
|
|
73
|
-
|
|
74
65
|
exports.default = _default;
|
|
@@ -4,13 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _utils = require("./utils");
|
|
9
|
-
|
|
10
8
|
function hasTests(node) {
|
|
11
9
|
return /^\s*[xf]?(test|it|describe)(\.\w+|\[['"]\w+['"]\])?\s*\(/mu.test(node.value);
|
|
12
10
|
}
|
|
13
|
-
|
|
14
11
|
var _default = (0, _utils.createRule)({
|
|
15
12
|
name: __filename,
|
|
16
13
|
meta: {
|
|
@@ -26,30 +23,23 @@ var _default = (0, _utils.createRule)({
|
|
|
26
23
|
type: 'suggestion'
|
|
27
24
|
},
|
|
28
25
|
defaultOptions: [],
|
|
29
|
-
|
|
30
26
|
create(context) {
|
|
31
27
|
const sourceCode = context.getSourceCode();
|
|
32
|
-
|
|
33
28
|
function checkNode(node) {
|
|
34
29
|
if (!hasTests(node)) {
|
|
35
30
|
return;
|
|
36
31
|
}
|
|
37
|
-
|
|
38
32
|
context.report({
|
|
39
33
|
messageId: 'commentedTests',
|
|
40
34
|
node
|
|
41
35
|
});
|
|
42
36
|
}
|
|
43
|
-
|
|
44
37
|
return {
|
|
45
38
|
Program() {
|
|
46
39
|
const comments = sourceCode.getAllComments();
|
|
47
40
|
comments.forEach(checkNode);
|
|
48
41
|
}
|
|
49
|
-
|
|
50
42
|
};
|
|
51
43
|
}
|
|
52
|
-
|
|
53
44
|
});
|
|
54
|
-
|
|
55
45
|
exports.default = _default;
|
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _utils = require("@typescript-eslint/utils");
|
|
9
|
-
|
|
10
8
|
var _utils2 = require("./utils");
|
|
11
|
-
|
|
12
9
|
const isCatchCall = node => node.callee.type === _utils.AST_NODE_TYPES.MemberExpression && (0, _utils2.isSupportedAccessor)(node.callee.property, 'catch');
|
|
13
|
-
|
|
14
10
|
var _default = (0, _utils2.createRule)({
|
|
15
11
|
name: __filename,
|
|
16
12
|
meta: {
|
|
@@ -26,46 +22,36 @@ var _default = (0, _utils2.createRule)({
|
|
|
26
22
|
schema: []
|
|
27
23
|
},
|
|
28
24
|
defaultOptions: [],
|
|
29
|
-
|
|
30
25
|
create(context) {
|
|
31
26
|
let conditionalDepth = 0;
|
|
32
27
|
let inTestCase = false;
|
|
33
28
|
let inPromiseCatch = false;
|
|
34
|
-
|
|
35
29
|
const increaseConditionalDepth = () => inTestCase && conditionalDepth++;
|
|
36
|
-
|
|
37
30
|
const decreaseConditionalDepth = () => inTestCase && conditionalDepth--;
|
|
38
|
-
|
|
39
31
|
return {
|
|
40
32
|
FunctionDeclaration(node) {
|
|
41
33
|
const declaredVariables = context.getDeclaredVariables(node);
|
|
42
34
|
const testCallExpressions = (0, _utils2.getTestCallExpressionsFromDeclaredVariables)(declaredVariables, context);
|
|
43
|
-
|
|
44
35
|
if (testCallExpressions.length > 0) {
|
|
45
36
|
inTestCase = true;
|
|
46
37
|
}
|
|
47
38
|
},
|
|
48
|
-
|
|
49
39
|
CallExpression(node) {
|
|
50
40
|
const {
|
|
51
41
|
type: jestFnCallType
|
|
52
42
|
} = (0, _utils2.parseJestFnCall)(node, context) ?? {};
|
|
53
|
-
|
|
54
43
|
if (jestFnCallType === 'test') {
|
|
55
44
|
inTestCase = true;
|
|
56
45
|
}
|
|
57
|
-
|
|
58
46
|
if (isCatchCall(node)) {
|
|
59
47
|
inPromiseCatch = true;
|
|
60
48
|
}
|
|
61
|
-
|
|
62
49
|
if (inTestCase && jestFnCallType === 'expect' && conditionalDepth > 0) {
|
|
63
50
|
context.report({
|
|
64
51
|
messageId: 'conditionalExpect',
|
|
65
52
|
node
|
|
66
53
|
});
|
|
67
54
|
}
|
|
68
|
-
|
|
69
55
|
if (inPromiseCatch && jestFnCallType === 'expect') {
|
|
70
56
|
context.report({
|
|
71
57
|
messageId: 'conditionalExpect',
|
|
@@ -73,17 +59,14 @@ var _default = (0, _utils2.createRule)({
|
|
|
73
59
|
});
|
|
74
60
|
}
|
|
75
61
|
},
|
|
76
|
-
|
|
77
62
|
'CallExpression:exit'(node) {
|
|
78
63
|
if ((0, _utils2.isTypeOfJestFnCall)(node, context, ['test'])) {
|
|
79
64
|
inTestCase = false;
|
|
80
65
|
}
|
|
81
|
-
|
|
82
66
|
if (isCatchCall(node)) {
|
|
83
67
|
inPromiseCatch = false;
|
|
84
68
|
}
|
|
85
69
|
},
|
|
86
|
-
|
|
87
70
|
CatchClause: increaseConditionalDepth,
|
|
88
71
|
'CatchClause:exit': decreaseConditionalDepth,
|
|
89
72
|
IfStatement: increaseConditionalDepth,
|
|
@@ -96,7 +79,5 @@ var _default = (0, _utils2.createRule)({
|
|
|
96
79
|
'LogicalExpression:exit': decreaseConditionalDepth
|
|
97
80
|
};
|
|
98
81
|
}
|
|
99
|
-
|
|
100
82
|
});
|
|
101
|
-
|
|
102
83
|
exports.default = _default;
|
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _utils = require("./utils");
|
|
9
|
-
|
|
10
8
|
var _default = (0, _utils.createRule)({
|
|
11
9
|
name: __filename,
|
|
12
10
|
meta: {
|
|
@@ -22,10 +20,8 @@ var _default = (0, _utils.createRule)({
|
|
|
22
20
|
schema: []
|
|
23
21
|
},
|
|
24
22
|
defaultOptions: [],
|
|
25
|
-
|
|
26
23
|
create(context) {
|
|
27
24
|
let inTestCase = false;
|
|
28
|
-
|
|
29
25
|
const maybeReportConditional = node => {
|
|
30
26
|
if (inTestCase) {
|
|
31
27
|
context.report({
|
|
@@ -34,27 +30,22 @@ var _default = (0, _utils.createRule)({
|
|
|
34
30
|
});
|
|
35
31
|
}
|
|
36
32
|
};
|
|
37
|
-
|
|
38
33
|
return {
|
|
39
34
|
CallExpression(node) {
|
|
40
35
|
if ((0, _utils.isTypeOfJestFnCall)(node, context, ['test'])) {
|
|
41
36
|
inTestCase = true;
|
|
42
37
|
}
|
|
43
38
|
},
|
|
44
|
-
|
|
45
39
|
'CallExpression:exit'(node) {
|
|
46
40
|
if ((0, _utils.isTypeOfJestFnCall)(node, context, ['test'])) {
|
|
47
41
|
inTestCase = false;
|
|
48
42
|
}
|
|
49
43
|
},
|
|
50
|
-
|
|
51
44
|
IfStatement: maybeReportConditional,
|
|
52
45
|
SwitchStatement: maybeReportConditional,
|
|
53
46
|
ConditionalExpression: maybeReportConditional,
|
|
54
47
|
LogicalExpression: maybeReportConditional
|
|
55
48
|
};
|
|
56
49
|
}
|
|
57
|
-
|
|
58
50
|
});
|
|
59
|
-
|
|
60
51
|
exports.default = _default;
|
|
@@ -4,20 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _utils = require("@typescript-eslint/utils");
|
|
9
|
-
|
|
10
8
|
var _utils2 = require("./utils");
|
|
11
|
-
|
|
12
9
|
const parseJestVersion = rawVersion => {
|
|
13
10
|
if (typeof rawVersion === 'number') {
|
|
14
11
|
return rawVersion;
|
|
15
12
|
}
|
|
16
|
-
|
|
17
13
|
const [majorVersion] = rawVersion.split('.');
|
|
18
14
|
return parseInt(majorVersion, 10);
|
|
19
15
|
};
|
|
20
|
-
|
|
21
16
|
var _default = (0, _utils2.createRule)({
|
|
22
17
|
name: __filename,
|
|
23
18
|
meta: {
|
|
@@ -34,12 +29,11 @@ var _default = (0, _utils2.createRule)({
|
|
|
34
29
|
fixable: 'code'
|
|
35
30
|
},
|
|
36
31
|
defaultOptions: [],
|
|
37
|
-
|
|
38
32
|
create(context) {
|
|
39
33
|
var _context$settings, _context$settings$jes;
|
|
40
|
-
|
|
41
34
|
const jestVersion = parseJestVersion(((_context$settings = context.settings) === null || _context$settings === void 0 ? void 0 : (_context$settings$jes = _context$settings.jest) === null || _context$settings$jes === void 0 ? void 0 : _context$settings$jes.version) || (0, _utils2.detectJestVersion)());
|
|
42
|
-
const deprecations = {
|
|
35
|
+
const deprecations = {
|
|
36
|
+
...(jestVersion >= 15 && {
|
|
43
37
|
'jest.resetModuleRegistry': 'jest.resetModules'
|
|
44
38
|
}),
|
|
45
39
|
...(jestVersion >= 17 && {
|
|
@@ -61,13 +55,10 @@ var _default = (0, _utils2.createRule)({
|
|
|
61
55
|
if (node.callee.type !== _utils.AST_NODE_TYPES.MemberExpression) {
|
|
62
56
|
return;
|
|
63
57
|
}
|
|
64
|
-
|
|
65
58
|
const deprecation = (0, _utils2.getNodeName)(node);
|
|
66
|
-
|
|
67
59
|
if (!deprecation || !(deprecation in deprecations)) {
|
|
68
60
|
return;
|
|
69
61
|
}
|
|
70
|
-
|
|
71
62
|
const replacement = deprecations[deprecation];
|
|
72
63
|
const {
|
|
73
64
|
callee
|
|
@@ -79,23 +70,16 @@ var _default = (0, _utils2.createRule)({
|
|
|
79
70
|
replacement
|
|
80
71
|
},
|
|
81
72
|
node,
|
|
82
|
-
|
|
83
73
|
fix(fixer) {
|
|
84
74
|
let [name, func] = replacement.split('.');
|
|
85
|
-
|
|
86
75
|
if (callee.property.type === _utils.AST_NODE_TYPES.Literal) {
|
|
87
76
|
func = `'${func}'`;
|
|
88
77
|
}
|
|
89
|
-
|
|
90
78
|
return [fixer.replaceText(callee.object, name), fixer.replaceText(callee.property, func)];
|
|
91
79
|
}
|
|
92
|
-
|
|
93
80
|
});
|
|
94
81
|
}
|
|
95
|
-
|
|
96
82
|
};
|
|
97
83
|
}
|
|
98
|
-
|
|
99
84
|
});
|
|
100
|
-
|
|
101
85
|
exports.default = _default;
|