eslint-plugin-jest 26.8.7 → 27.1.5
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/README.md +82 -78
- package/docs/rules/consistent-test-it.md +9 -4
- package/docs/rules/expect-expect.md +5 -0
- package/docs/rules/max-expects.md +3 -1
- package/docs/rules/max-nested-describe.md +3 -1
- package/docs/rules/no-alias-methods.md +13 -2
- package/docs/rules/no-commented-out-tests.md +6 -1
- package/docs/rules/no-conditional-expect.md +7 -2
- package/docs/rules/no-conditional-in-test.md +3 -1
- package/docs/rules/no-deprecated-functions.md +14 -7
- package/docs/rules/no-disabled-tests.md +6 -1
- package/docs/rules/no-done-callback.md +9 -1
- package/docs/rules/no-duplicate-hooks.md +3 -1
- package/docs/rules/no-export.md +6 -1
- package/docs/rules/no-focused-tests.md +10 -1
- package/docs/rules/no-hooks.md +3 -1
- package/docs/rules/no-identical-title.md +6 -1
- package/docs/rules/no-if.md +4 -4
- package/docs/rules/no-interpolation-in-snapshots.md +6 -1
- package/docs/rules/no-jasmine-globals.md +10 -2
- package/docs/rules/no-large-snapshots.md +4 -2
- package/docs/rules/no-mocks-import.md +6 -1
- package/docs/rules/no-restricted-jest-methods.md +51 -0
- package/docs/rules/no-restricted-matchers.md +19 -4
- package/docs/rules/no-standalone-expect.md +6 -1
- package/docs/rules/no-test-prefixes.md +9 -1
- package/docs/rules/no-test-return-statement.md +2 -0
- package/docs/rules/prefer-called-with.md +2 -0
- package/docs/rules/prefer-comparison-matcher.md +5 -0
- package/docs/rules/prefer-each.md +56 -0
- package/docs/rules/prefer-equality-matcher.md +5 -0
- package/docs/rules/prefer-expect-assertions.md +5 -2
- package/docs/rules/prefer-expect-resolves.md +8 -1
- package/docs/rules/prefer-hooks-in-order.md +3 -1
- package/docs/rules/prefer-hooks-on-top.md +3 -1
- package/docs/rules/prefer-lowercase-title.md +5 -0
- package/docs/rules/prefer-mock-promise-shorthand.md +6 -1
- package/docs/rules/prefer-snapshot-hint.md +2 -0
- package/docs/rules/prefer-spy-on.md +5 -2
- package/docs/rules/prefer-strict-equal.md +5 -2
- package/docs/rules/prefer-to-be.md +8 -0
- package/docs/rules/prefer-to-contain.md +8 -2
- package/docs/rules/prefer-to-have-length.md +8 -2
- package/docs/rules/prefer-todo.md +5 -2
- package/docs/rules/require-hook.md +2 -0
- package/docs/rules/require-to-throw-message.md +2 -2
- package/docs/rules/require-top-level-describe.md +5 -1
- package/docs/rules/unbound-method.md +7 -2
- package/docs/rules/valid-describe-callback.md +6 -1
- package/docs/rules/valid-expect-in-promise.md +6 -1
- package/docs/rules/valid-expect.md +5 -2
- package/docs/rules/valid-title.md +9 -1
- package/lib/index.js +14 -25
- package/lib/processors/snapshot-processor.js +3 -5
- package/lib/rules/consistent-test-it.js +1 -19
- package/lib/rules/expect-expect.js +1 -18
- package/lib/rules/max-expects.js +0 -16
- package/lib/rules/max-nested-describe.js +0 -13
- package/lib/rules/no-alias-methods.js +1 -10
- package/lib/rules/no-commented-out-tests.js +0 -10
- package/lib/rules/no-conditional-expect.js +2 -23
- 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 +3 -19
- package/lib/rules/no-done-callback.js +5 -35
- package/lib/rules/no-duplicate-hooks.js +0 -12
- package/lib/rules/no-export.js +0 -12
- package/lib/rules/no-focused-tests.js +1 -17
- 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 +1 -23
- package/lib/rules/no-large-snapshots.js +4 -24
- package/lib/rules/no-mocks-import.js +0 -12
- package/lib/rules/no-restricted-jest-methods.js +56 -0
- package/lib/rules/no-restricted-matchers.js +13 -28
- package/lib/rules/no-standalone-expect.js +7 -33
- package/lib/rules/no-test-prefixes.js +1 -13
- 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 +80 -0
- package/lib/rules/prefer-equality-matcher.js +12 -25
- package/lib/rules/prefer-expect-assertions.js +8 -54
- 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 +8 -34
- package/lib/rules/prefer-spy-on.js +0 -17
- package/lib/rules/prefer-strict-equal.js +1 -11
- package/lib/rules/prefer-to-be.js +5 -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 +1 -25
- package/lib/rules/require-to-throw-message.js +0 -9
- package/lib/rules/require-top-level-describe.js +1 -18
- package/lib/rules/unbound-method.js +3 -30
- 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 +51 -154
- package/lib/rules/valid-describe-callback.js +0 -17
- package/lib/rules/valid-expect-in-promise.js +28 -95
- package/lib/rules/valid-expect.js +5 -48
- package/lib/rules/valid-title.js +5 -40
- package/package.json +20 -16
- package/docs/rules/no-jest-import.md +0 -20
- package/lib/rules/no-jest-import.js +0 -48
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,20 +36,16 @@ const createConfig = rules => ({
|
|
|
43
36
|
},
|
|
44
37
|
rules
|
|
45
38
|
});
|
|
46
|
-
|
|
47
39
|
module.exports = {
|
|
48
40
|
configs: {
|
|
49
41
|
all: createConfig(allRules),
|
|
50
42
|
recommended: createConfig(recommendedRules),
|
|
51
|
-
style: {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
'jest/prefer-to-have-length': 'error'
|
|
58
|
-
}
|
|
59
|
-
}
|
|
43
|
+
style: createConfig({
|
|
44
|
+
'jest/no-alias-methods': 'warn',
|
|
45
|
+
'jest/prefer-to-be': 'error',
|
|
46
|
+
'jest/prefer-to-contain': 'error',
|
|
47
|
+
'jest/prefer-to-have-length': 'error'
|
|
48
|
+
})
|
|
60
49
|
},
|
|
61
50
|
environments: {
|
|
62
51
|
globals: {
|
|
@@ -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,19 +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 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: {
|
|
17
13
|
docs: {
|
|
18
14
|
category: 'Best Practices',
|
|
19
|
-
description: '
|
|
15
|
+
description: 'Enforce `test` and `it` usage conventions',
|
|
20
16
|
recommended: false
|
|
21
17
|
},
|
|
22
18
|
fixable: 'code',
|
|
@@ -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,58 +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
|
-
|
|
93
|
-
|
|
94
|
-
const name = (_getNodeName = (0, _utils2.getNodeName)(node.callee)) !== null && _getNodeName !== void 0 ? _getNodeName : '';
|
|
95
|
-
|
|
83
|
+
const name = (0, _utils2.getNodeName)(node.callee) ?? '';
|
|
96
84
|
if ((0, _utils2.isTypeOfJestFnCall)(node, context, ['test']) || additionalTestBlockFunctions.includes(name)) {
|
|
97
85
|
if (node.callee.type === _utils.AST_NODE_TYPES.MemberExpression && (0, _utils2.isSupportedAccessor)(node.callee.property, 'todo')) {
|
|
98
86
|
return;
|
|
99
87
|
}
|
|
100
|
-
|
|
101
88
|
unchecked.push(node);
|
|
102
89
|
} else if (matchesAssertFunctionName(name, assertFunctionNames)) {
|
|
103
90
|
// Return early in case of nested `it` statements.
|
|
104
91
|
checkCallExpressionUsed(context.getAncestors());
|
|
105
92
|
}
|
|
106
93
|
},
|
|
107
|
-
|
|
108
94
|
'Program:exit'() {
|
|
109
95
|
unchecked.forEach(node => context.report({
|
|
110
96
|
messageId: 'noAssertions',
|
|
111
97
|
node
|
|
112
98
|
}));
|
|
113
99
|
}
|
|
114
|
-
|
|
115
100
|
};
|
|
116
101
|
}
|
|
117
|
-
|
|
118
102
|
});
|
|
119
|
-
|
|
120
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,16 +4,14 @@ 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: {
|
|
13
11
|
docs: {
|
|
14
12
|
category: 'Best Practices',
|
|
15
13
|
description: 'Disallow alias methods',
|
|
16
|
-
recommended:
|
|
14
|
+
recommended: 'error'
|
|
17
15
|
},
|
|
18
16
|
messages: {
|
|
19
17
|
replaceAlias: `Replace {{ alias }}() with its canonical name of {{ canonical }}()`
|
|
@@ -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,18 +4,14 @@ 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: {
|
|
17
13
|
docs: {
|
|
18
|
-
description: '
|
|
14
|
+
description: 'Disallow calling `expect` conditionally',
|
|
19
15
|
category: 'Best Practices',
|
|
20
16
|
recommended: 'error'
|
|
21
17
|
},
|
|
@@ -26,48 +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
|
-
var _parseJestFnCall;
|
|
51
|
-
|
|
52
40
|
const {
|
|
53
41
|
type: jestFnCallType
|
|
54
|
-
} = (
|
|
55
|
-
|
|
42
|
+
} = (0, _utils2.parseJestFnCall)(node, context) ?? {};
|
|
56
43
|
if (jestFnCallType === 'test') {
|
|
57
44
|
inTestCase = true;
|
|
58
45
|
}
|
|
59
|
-
|
|
60
46
|
if (isCatchCall(node)) {
|
|
61
47
|
inPromiseCatch = true;
|
|
62
48
|
}
|
|
63
|
-
|
|
64
49
|
if (inTestCase && jestFnCallType === 'expect' && conditionalDepth > 0) {
|
|
65
50
|
context.report({
|
|
66
51
|
messageId: 'conditionalExpect',
|
|
67
52
|
node
|
|
68
53
|
});
|
|
69
54
|
}
|
|
70
|
-
|
|
71
55
|
if (inPromiseCatch && jestFnCallType === 'expect') {
|
|
72
56
|
context.report({
|
|
73
57
|
messageId: 'conditionalExpect',
|
|
@@ -75,17 +59,14 @@ var _default = (0, _utils2.createRule)({
|
|
|
75
59
|
});
|
|
76
60
|
}
|
|
77
61
|
},
|
|
78
|
-
|
|
79
62
|
'CallExpression:exit'(node) {
|
|
80
63
|
if ((0, _utils2.isTypeOfJestFnCall)(node, context, ['test'])) {
|
|
81
64
|
inTestCase = false;
|
|
82
65
|
}
|
|
83
|
-
|
|
84
66
|
if (isCatchCall(node)) {
|
|
85
67
|
inPromiseCatch = false;
|
|
86
68
|
}
|
|
87
69
|
},
|
|
88
|
-
|
|
89
70
|
CatchClause: increaseConditionalDepth,
|
|
90
71
|
'CatchClause:exit': decreaseConditionalDepth,
|
|
91
72
|
IfStatement: increaseConditionalDepth,
|
|
@@ -98,7 +79,5 @@ var _default = (0, _utils2.createRule)({
|
|
|
98
79
|
'LogicalExpression:exit': decreaseConditionalDepth
|
|
99
80
|
};
|
|
100
81
|
}
|
|
101
|
-
|
|
102
82
|
});
|
|
103
|
-
|
|
104
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;
|