eslint-plugin-jest 27.1.2 → 27.1.4
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 +81 -80
- package/docs/rules/consistent-test-it.md +4 -11
- package/docs/rules/expect-expect.md +3 -4
- package/docs/rules/max-expects.md +1 -5
- package/docs/rules/max-nested-describe.md +1 -5
- package/docs/rules/no-alias-methods.md +8 -10
- package/docs/rules/no-commented-out-tests.md +3 -4
- package/docs/rules/no-conditional-expect.md +4 -5
- package/docs/rules/no-conditional-in-test.md +1 -5
- package/docs/rules/no-deprecated-functions.md +5 -7
- package/docs/rules/no-disabled-tests.md +3 -4
- package/docs/rules/no-done-callback.md +6 -8
- package/docs/rules/no-duplicate-hooks.md +1 -5
- package/docs/rules/no-export.md +3 -4
- package/docs/rules/no-focused-tests.md +5 -7
- package/docs/rules/no-hooks.md +1 -5
- package/docs/rules/no-identical-title.md +3 -4
- package/docs/rules/no-if.md +2 -2
- package/docs/rules/no-interpolation-in-snapshots.md +3 -4
- package/docs/rules/no-jasmine-globals.md +6 -8
- package/docs/rules/no-large-snapshots.md +2 -6
- package/docs/rules/no-mocks-import.md +3 -4
- package/docs/rules/no-restricted-jest-methods.md +1 -5
- package/docs/rules/no-restricted-matchers.md +1 -5
- package/docs/rules/no-standalone-expect.md +3 -4
- package/docs/rules/no-test-prefixes.md +6 -8
- package/docs/rules/no-test-return-statement.md +1 -5
- package/docs/rules/prefer-called-with.md +1 -5
- package/docs/rules/prefer-comparison-matcher.md +3 -8
- package/docs/rules/prefer-each.md +1 -5
- package/docs/rules/prefer-equality-matcher.md +3 -8
- package/docs/rules/prefer-expect-assertions.md +3 -10
- package/docs/rules/prefer-expect-resolves.md +3 -8
- package/docs/rules/prefer-hooks-in-order.md +1 -5
- package/docs/rules/prefer-hooks-on-top.md +1 -5
- package/docs/rules/prefer-lowercase-title.md +3 -8
- package/docs/rules/prefer-mock-promise-shorthand.md +3 -8
- package/docs/rules/prefer-snapshot-hint.md +1 -5
- package/docs/rules/prefer-spy-on.md +3 -10
- package/docs/rules/prefer-strict-equal.md +3 -10
- package/docs/rules/prefer-to-be.md +5 -7
- package/docs/rules/prefer-to-contain.md +5 -9
- package/docs/rules/prefer-to-have-length.md +5 -9
- package/docs/rules/prefer-todo.md +3 -10
- package/docs/rules/require-hook.md +1 -5
- package/docs/rules/require-to-throw-message.md +1 -7
- package/docs/rules/require-top-level-describe.md +1 -5
- package/docs/rules/unbound-method.md +2 -4
- package/docs/rules/valid-describe-callback.md +3 -4
- package/docs/rules/valid-expect-in-promise.md +4 -5
- package/docs/rules/valid-expect.md +3 -6
- package/docs/rules/valid-title.md +5 -7
- package/lib/index.js +8 -16
- package/lib/processors/snapshot-processor.js +3 -5
- package/lib/rules/consistent-test-it.js +1 -19
- 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 +1 -20
- 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 +2 -31
- 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 +3 -21
- 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 +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 +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 +62 -118
- 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 +3 -2
|
@@ -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,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,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,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;
|
|
@@ -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: {
|
|
@@ -27,25 +25,20 @@ var _default = (0, _utils.createRule)({
|
|
|
27
25
|
type: 'suggestion'
|
|
28
26
|
},
|
|
29
27
|
defaultOptions: [],
|
|
30
|
-
|
|
31
28
|
create(context) {
|
|
32
29
|
let suiteDepth = 0;
|
|
33
30
|
let testDepth = 0;
|
|
34
31
|
return {
|
|
35
32
|
CallExpression(node) {
|
|
36
33
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
37
|
-
|
|
38
34
|
if (!jestFnCall) {
|
|
39
35
|
return;
|
|
40
36
|
}
|
|
41
|
-
|
|
42
37
|
if (jestFnCall.type === 'describe') {
|
|
43
38
|
suiteDepth++;
|
|
44
39
|
}
|
|
45
|
-
|
|
46
40
|
if (jestFnCall.type === 'test') {
|
|
47
41
|
testDepth++;
|
|
48
|
-
|
|
49
42
|
if (node.arguments.length < 2 && jestFnCall.members.every(s => (0, _utils.getAccessorValue)(s) !== 'todo')) {
|
|
50
43
|
context.report({
|
|
51
44
|
messageId: 'missingFunction',
|
|
@@ -53,8 +46,8 @@ var _default = (0, _utils.createRule)({
|
|
|
53
46
|
});
|
|
54
47
|
}
|
|
55
48
|
}
|
|
56
|
-
|
|
57
|
-
|
|
49
|
+
if (
|
|
50
|
+
// the only jest functions that are with "x" are "xdescribe", "xtest", and "xit"
|
|
58
51
|
jestFnCall.name.startsWith('x') || jestFnCall.members.some(s => (0, _utils.getAccessorValue)(s) === 'skip')) {
|
|
59
52
|
context.report({
|
|
60
53
|
messageId: jestFnCall.type === 'describe' ? 'disabledSuite' : 'disabledTest',
|
|
@@ -62,28 +55,22 @@ var _default = (0, _utils.createRule)({
|
|
|
62
55
|
});
|
|
63
56
|
}
|
|
64
57
|
},
|
|
65
|
-
|
|
66
58
|
'CallExpression:exit'(node) {
|
|
67
59
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
68
|
-
|
|
69
60
|
if (!jestFnCall) {
|
|
70
61
|
return;
|
|
71
62
|
}
|
|
72
|
-
|
|
73
63
|
if (jestFnCall.type === 'describe') {
|
|
74
64
|
suiteDepth--;
|
|
75
65
|
}
|
|
76
|
-
|
|
77
66
|
if (jestFnCall.type === 'test') {
|
|
78
67
|
testDepth--;
|
|
79
68
|
}
|
|
80
69
|
},
|
|
81
|
-
|
|
82
70
|
'CallExpression[callee.name="pending"]'(node) {
|
|
83
71
|
if ((0, _utils.scopeHasLocalReference)(context.getScope(), 'pending')) {
|
|
84
72
|
return;
|
|
85
73
|
}
|
|
86
|
-
|
|
87
74
|
if (testDepth > 0) {
|
|
88
75
|
context.report({
|
|
89
76
|
messageId: 'pendingTest',
|
|
@@ -101,10 +88,7 @@ var _default = (0, _utils.createRule)({
|
|
|
101
88
|
});
|
|
102
89
|
}
|
|
103
90
|
}
|
|
104
|
-
|
|
105
91
|
};
|
|
106
92
|
}
|
|
107
|
-
|
|
108
93
|
});
|
|
109
|
-
|
|
110
94
|
exports.default = _default;
|