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
|
@@ -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;
|
|
@@ -4,29 +4,21 @@ 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 findCallbackArg = (node, isJestEach, context) => {
|
|
13
10
|
if (isJestEach) {
|
|
14
11
|
return node.arguments[1];
|
|
15
12
|
}
|
|
16
|
-
|
|
17
13
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
18
|
-
|
|
19
14
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'hook' && node.arguments.length >= 1) {
|
|
20
15
|
return node.arguments[0];
|
|
21
16
|
}
|
|
22
|
-
|
|
23
17
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'test' && node.arguments.length >= 2) {
|
|
24
18
|
return node.arguments[1];
|
|
25
19
|
}
|
|
26
|
-
|
|
27
20
|
return null;
|
|
28
21
|
};
|
|
29
|
-
|
|
30
22
|
var _default = (0, _utils2.createRule)({
|
|
31
23
|
name: __filename,
|
|
32
24
|
meta: {
|
|
@@ -45,31 +37,24 @@ var _default = (0, _utils2.createRule)({
|
|
|
45
37
|
hasSuggestions: true
|
|
46
38
|
},
|
|
47
39
|
defaultOptions: [],
|
|
48
|
-
|
|
49
40
|
create(context) {
|
|
50
41
|
return {
|
|
51
42
|
CallExpression(node) {
|
|
52
43
|
var _getNodeName;
|
|
53
|
-
|
|
54
44
|
// done is the second argument for it.each, not the first
|
|
55
45
|
const isJestEach = ((_getNodeName = (0, _utils2.getNodeName)(node.callee)) === null || _getNodeName === void 0 ? void 0 : _getNodeName.endsWith('.each')) ?? false;
|
|
56
|
-
|
|
57
46
|
if (isJestEach && node.callee.type !== _utils.AST_NODE_TYPES.TaggedTemplateExpression) {
|
|
58
47
|
// isJestEach but not a TaggedTemplateExpression, so this must be
|
|
59
48
|
// the `jest.each([])()` syntax which this rule doesn't support due
|
|
60
49
|
// to its complexity (see jest-community/eslint-plugin-jest#710)
|
|
61
50
|
return;
|
|
62
51
|
}
|
|
63
|
-
|
|
64
52
|
const callback = findCallbackArg(node, isJestEach, context);
|
|
65
53
|
const callbackArgIndex = Number(isJestEach);
|
|
66
|
-
|
|
67
54
|
if (!callback || !(0, _utils2.isFunction)(callback) || callback.params.length !== 1 + callbackArgIndex) {
|
|
68
55
|
return;
|
|
69
56
|
}
|
|
70
|
-
|
|
71
57
|
const argument = callback.params[callbackArgIndex];
|
|
72
|
-
|
|
73
58
|
if (argument.type !== _utils.AST_NODE_TYPES.Identifier) {
|
|
74
59
|
context.report({
|
|
75
60
|
node: argument,
|
|
@@ -77,7 +62,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
77
62
|
});
|
|
78
63
|
return;
|
|
79
64
|
}
|
|
80
|
-
|
|
81
65
|
if (callback.async) {
|
|
82
66
|
context.report({
|
|
83
67
|
node: argument,
|
|
@@ -85,7 +69,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
85
69
|
});
|
|
86
70
|
return;
|
|
87
71
|
}
|
|
88
|
-
|
|
89
72
|
context.report({
|
|
90
73
|
node: argument,
|
|
91
74
|
messageId: 'noDoneCallback',
|
|
@@ -94,7 +77,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
94
77
|
data: {
|
|
95
78
|
callback: argument.name
|
|
96
79
|
},
|
|
97
|
-
|
|
98
80
|
fix(fixer) {
|
|
99
81
|
const {
|
|
100
82
|
body
|
|
@@ -104,46 +86,35 @@ var _default = (0, _utils2.createRule)({
|
|
|
104
86
|
const lastBodyToken = sourceCode.getLastToken(body);
|
|
105
87
|
const tokenBeforeArgument = sourceCode.getTokenBefore(argument);
|
|
106
88
|
const tokenAfterArgument = sourceCode.getTokenAfter(argument);
|
|
107
|
-
/* istanbul ignore if */
|
|
108
89
|
|
|
90
|
+
/* istanbul ignore if */
|
|
109
91
|
if (!firstBodyToken || !lastBodyToken || !tokenBeforeArgument || !tokenAfterArgument) {
|
|
110
92
|
throw new Error(`Unexpected null when attempting to fix ${context.getFilename()} - please file a github issue at https://github.com/jest-community/eslint-plugin-jest`);
|
|
111
93
|
}
|
|
112
|
-
|
|
113
94
|
const argumentInParens = tokenBeforeArgument.value === '(' && tokenAfterArgument.value === ')';
|
|
114
95
|
let argumentFix = fixer.replaceText(argument, '()');
|
|
115
|
-
|
|
116
96
|
if (argumentInParens) {
|
|
117
97
|
argumentFix = fixer.remove(argument);
|
|
118
98
|
}
|
|
119
|
-
|
|
120
99
|
let newCallback = argument.name;
|
|
121
|
-
|
|
122
100
|
if (argumentInParens) {
|
|
123
101
|
newCallback = `(${newCallback})`;
|
|
124
102
|
}
|
|
125
|
-
|
|
126
103
|
let beforeReplacement = `new Promise(${newCallback} => `;
|
|
127
104
|
let afterReplacement = ')';
|
|
128
105
|
let replaceBefore = true;
|
|
129
|
-
|
|
130
106
|
if (body.type === _utils.AST_NODE_TYPES.BlockStatement) {
|
|
131
107
|
const keyword = 'return';
|
|
132
108
|
beforeReplacement = `${keyword} ${beforeReplacement}{`;
|
|
133
109
|
afterReplacement += '}';
|
|
134
110
|
replaceBefore = false;
|
|
135
111
|
}
|
|
136
|
-
|
|
137
112
|
return [argumentFix, replaceBefore ? fixer.insertTextBefore(firstBodyToken, beforeReplacement) : fixer.insertTextAfter(firstBodyToken, beforeReplacement), fixer.insertTextAfter(lastBodyToken, afterReplacement)];
|
|
138
113
|
}
|
|
139
|
-
|
|
140
114
|
}]
|
|
141
115
|
});
|
|
142
116
|
}
|
|
143
|
-
|
|
144
117
|
};
|
|
145
118
|
}
|
|
146
|
-
|
|
147
119
|
});
|
|
148
|
-
|
|
149
120
|
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,27 +20,21 @@ var _default = (0, _utils.createRule)({
|
|
|
22
20
|
type: 'suggestion'
|
|
23
21
|
},
|
|
24
22
|
defaultOptions: [],
|
|
25
|
-
|
|
26
23
|
create(context) {
|
|
27
24
|
const hookContexts = [{}];
|
|
28
25
|
return {
|
|
29
26
|
CallExpression(node) {
|
|
30
27
|
var _jestFnCall$name;
|
|
31
|
-
|
|
32
28
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
33
|
-
|
|
34
29
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'describe') {
|
|
35
30
|
hookContexts.push({});
|
|
36
31
|
}
|
|
37
|
-
|
|
38
32
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'hook') {
|
|
39
33
|
return;
|
|
40
34
|
}
|
|
41
|
-
|
|
42
35
|
const currentLayer = hookContexts[hookContexts.length - 1];
|
|
43
36
|
currentLayer[_jestFnCall$name = jestFnCall.name] || (currentLayer[_jestFnCall$name] = 0);
|
|
44
37
|
currentLayer[jestFnCall.name] += 1;
|
|
45
|
-
|
|
46
38
|
if (currentLayer[jestFnCall.name] > 1) {
|
|
47
39
|
context.report({
|
|
48
40
|
messageId: 'noDuplicateHook',
|
|
@@ -53,16 +45,12 @@ var _default = (0, _utils.createRule)({
|
|
|
53
45
|
});
|
|
54
46
|
}
|
|
55
47
|
},
|
|
56
|
-
|
|
57
48
|
'CallExpression:exit'(node) {
|
|
58
49
|
if ((0, _utils.isTypeOfJestFnCall)(node, context, ['describe'])) {
|
|
59
50
|
hookContexts.pop();
|
|
60
51
|
}
|
|
61
52
|
}
|
|
62
|
-
|
|
63
53
|
};
|
|
64
54
|
}
|
|
65
|
-
|
|
66
55
|
});
|
|
67
|
-
|
|
68
56
|
exports.default = _default;
|
package/lib/rules/no-export.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: {
|
|
@@ -24,7 +21,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
24
21
|
schema: []
|
|
25
22
|
},
|
|
26
23
|
defaultOptions: [],
|
|
27
|
-
|
|
28
24
|
create(context) {
|
|
29
25
|
const exportNodes = [];
|
|
30
26
|
let hasTestCase = false;
|
|
@@ -39,38 +35,30 @@ var _default = (0, _utils2.createRule)({
|
|
|
39
35
|
}
|
|
40
36
|
}
|
|
41
37
|
},
|
|
42
|
-
|
|
43
38
|
CallExpression(node) {
|
|
44
39
|
if ((0, _utils2.isTypeOfJestFnCall)(node, context, ['test'])) {
|
|
45
40
|
hasTestCase = true;
|
|
46
41
|
}
|
|
47
42
|
},
|
|
48
|
-
|
|
49
43
|
'ExportNamedDeclaration, ExportDefaultDeclaration'(node) {
|
|
50
44
|
exportNodes.push(node);
|
|
51
45
|
},
|
|
52
|
-
|
|
53
46
|
'AssignmentExpression > MemberExpression'(node) {
|
|
54
47
|
let {
|
|
55
48
|
object,
|
|
56
49
|
property
|
|
57
50
|
} = node;
|
|
58
|
-
|
|
59
51
|
if (object.type === _utils.AST_NODE_TYPES.MemberExpression) {
|
|
60
52
|
({
|
|
61
53
|
object,
|
|
62
54
|
property
|
|
63
55
|
} = object);
|
|
64
56
|
}
|
|
65
|
-
|
|
66
57
|
if ('name' in object && object.name === 'module' && property.type === _utils.AST_NODE_TYPES.Identifier && /^exports?$/u.test(property.name)) {
|
|
67
58
|
exportNodes.push(node);
|
|
68
59
|
}
|
|
69
60
|
}
|
|
70
|
-
|
|
71
61
|
};
|
|
72
62
|
}
|
|
73
|
-
|
|
74
63
|
});
|
|
75
|
-
|
|
76
64
|
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: {
|
|
@@ -26,43 +23,34 @@ var _default = (0, _utils2.createRule)({
|
|
|
26
23
|
hasSuggestions: true
|
|
27
24
|
},
|
|
28
25
|
defaultOptions: [],
|
|
29
|
-
|
|
30
26
|
create(context) {
|
|
31
27
|
return {
|
|
32
28
|
CallExpression(node) {
|
|
33
29
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
34
|
-
|
|
35
30
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'test' && (jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'describe') {
|
|
36
31
|
return;
|
|
37
32
|
}
|
|
38
|
-
|
|
39
33
|
if (jestFnCall.name.startsWith('f')) {
|
|
40
34
|
context.report({
|
|
41
35
|
messageId: 'focusedTest',
|
|
42
36
|
node,
|
|
43
37
|
suggest: [{
|
|
44
38
|
messageId: 'suggestRemoveFocus',
|
|
45
|
-
|
|
46
39
|
fix(fixer) {
|
|
47
40
|
// don't apply the fixer if we're an aliased import
|
|
48
41
|
if (jestFnCall.head.type === 'import' && jestFnCall.name !== jestFnCall.head.local) {
|
|
49
42
|
return null;
|
|
50
43
|
}
|
|
51
|
-
|
|
52
44
|
return fixer.removeRange([node.range[0], node.range[0] + 1]);
|
|
53
45
|
}
|
|
54
|
-
|
|
55
46
|
}]
|
|
56
47
|
});
|
|
57
48
|
return;
|
|
58
49
|
}
|
|
59
|
-
|
|
60
50
|
const onlyNode = jestFnCall.members.find(s => (0, _utils2.getAccessorValue)(s) === 'only');
|
|
61
|
-
|
|
62
51
|
if (!onlyNode) {
|
|
63
52
|
return;
|
|
64
53
|
}
|
|
65
|
-
|
|
66
54
|
context.report({
|
|
67
55
|
messageId: 'focusedTest',
|
|
68
56
|
node: onlyNode,
|
|
@@ -72,10 +60,7 @@ var _default = (0, _utils2.createRule)({
|
|
|
72
60
|
}]
|
|
73
61
|
});
|
|
74
62
|
}
|
|
75
|
-
|
|
76
63
|
};
|
|
77
64
|
}
|
|
78
|
-
|
|
79
65
|
});
|
|
80
|
-
|
|
81
66
|
exports.default = _default;
|
package/lib/rules/no-hooks.js
CHANGED
|
@@ -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: {
|
|
@@ -33,14 +31,12 @@ var _default = (0, _utils.createRule)({
|
|
|
33
31
|
defaultOptions: [{
|
|
34
32
|
allow: []
|
|
35
33
|
}],
|
|
36
|
-
|
|
37
34
|
create(context, [{
|
|
38
35
|
allow = []
|
|
39
36
|
}]) {
|
|
40
37
|
return {
|
|
41
38
|
CallExpression(node) {
|
|
42
39
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
43
|
-
|
|
44
40
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'hook' && !allow.includes(jestFnCall.name)) {
|
|
45
41
|
context.report({
|
|
46
42
|
node,
|
|
@@ -51,10 +47,7 @@ var _default = (0, _utils.createRule)({
|
|
|
51
47
|
});
|
|
52
48
|
}
|
|
53
49
|
}
|
|
54
|
-
|
|
55
50
|
};
|
|
56
51
|
}
|
|
57
|
-
|
|
58
52
|
});
|
|
59
|
-
|
|
60
53
|
exports.default = _default;
|
|
@@ -4,14 +4,11 @@ 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
|
const newDescribeContext = () => ({
|
|
11
9
|
describeTitles: [],
|
|
12
10
|
testTitles: []
|
|
13
11
|
});
|
|
14
|
-
|
|
15
12
|
var _default = (0, _utils.createRule)({
|
|
16
13
|
name: __filename,
|
|
17
14
|
meta: {
|
|
@@ -28,34 +25,26 @@ var _default = (0, _utils.createRule)({
|
|
|
28
25
|
type: 'suggestion'
|
|
29
26
|
},
|
|
30
27
|
defaultOptions: [],
|
|
31
|
-
|
|
32
28
|
create(context) {
|
|
33
29
|
const contexts = [newDescribeContext()];
|
|
34
30
|
return {
|
|
35
31
|
CallExpression(node) {
|
|
36
32
|
const currentLayer = contexts[contexts.length - 1];
|
|
37
33
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
38
|
-
|
|
39
34
|
if (!jestFnCall) {
|
|
40
35
|
return;
|
|
41
36
|
}
|
|
42
|
-
|
|
43
37
|
if (jestFnCall.type === 'describe') {
|
|
44
38
|
contexts.push(newDescribeContext());
|
|
45
39
|
}
|
|
46
|
-
|
|
47
40
|
if (jestFnCall.members.find(s => (0, _utils.isSupportedAccessor)(s, 'each'))) {
|
|
48
41
|
return;
|
|
49
42
|
}
|
|
50
|
-
|
|
51
43
|
const [argument] = node.arguments;
|
|
52
|
-
|
|
53
44
|
if (!argument || !(0, _utils.isStringNode)(argument)) {
|
|
54
45
|
return;
|
|
55
46
|
}
|
|
56
|
-
|
|
57
47
|
const title = (0, _utils.getStringValue)(argument);
|
|
58
|
-
|
|
59
48
|
if (jestFnCall.type === 'test') {
|
|
60
49
|
if (currentLayer.testTitles.includes(title)) {
|
|
61
50
|
context.report({
|
|
@@ -63,33 +52,25 @@ var _default = (0, _utils.createRule)({
|
|
|
63
52
|
node: argument
|
|
64
53
|
});
|
|
65
54
|
}
|
|
66
|
-
|
|
67
55
|
currentLayer.testTitles.push(title);
|
|
68
56
|
}
|
|
69
|
-
|
|
70
57
|
if (jestFnCall.type !== 'describe') {
|
|
71
58
|
return;
|
|
72
59
|
}
|
|
73
|
-
|
|
74
60
|
if (currentLayer.describeTitles.includes(title)) {
|
|
75
61
|
context.report({
|
|
76
62
|
messageId: 'multipleDescribeTitle',
|
|
77
63
|
node: argument
|
|
78
64
|
});
|
|
79
65
|
}
|
|
80
|
-
|
|
81
66
|
currentLayer.describeTitles.push(title);
|
|
82
67
|
},
|
|
83
|
-
|
|
84
68
|
'CallExpression:exit'(node) {
|
|
85
69
|
if ((0, _utils.isTypeOfJestFnCall)(node, context, ['describe'])) {
|
|
86
70
|
contexts.pop();
|
|
87
71
|
}
|
|
88
72
|
}
|
|
89
|
-
|
|
90
73
|
};
|
|
91
74
|
}
|
|
92
|
-
|
|
93
75
|
});
|
|
94
|
-
|
|
95
76
|
exports.default = _default;
|
package/lib/rules/no-if.js
CHANGED
|
@@ -4,21 +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 testCaseNames = new Set([...Object.keys(_utils2.TestCaseName), 'it.only', 'it.only', 'it.skip', 'it.skip', 'test.only', 'test.only', 'test.skip', 'test.skip', 'fit.concurrent']);
|
|
13
|
-
|
|
14
10
|
const isTestFunctionExpression = node => node.parent !== undefined && node.parent.type === _utils.AST_NODE_TYPES.CallExpression && testCaseNames.has((0, _utils2.getNodeName)(node.parent.callee));
|
|
15
|
-
|
|
16
11
|
const conditionName = {
|
|
17
12
|
[_utils.AST_NODE_TYPES.ConditionalExpression]: 'conditional',
|
|
18
13
|
[_utils.AST_NODE_TYPES.SwitchStatement]: 'switch',
|
|
19
14
|
[_utils.AST_NODE_TYPES.IfStatement]: 'if'
|
|
20
15
|
};
|
|
21
|
-
|
|
22
16
|
var _default = (0, _utils2.createRule)({
|
|
23
17
|
name: __filename,
|
|
24
18
|
meta: {
|
|
@@ -36,17 +30,13 @@ var _default = (0, _utils2.createRule)({
|
|
|
36
30
|
type: 'suggestion'
|
|
37
31
|
},
|
|
38
32
|
defaultOptions: [],
|
|
39
|
-
|
|
40
33
|
create(context) {
|
|
41
34
|
const stack = [];
|
|
42
|
-
|
|
43
35
|
function validate(node) {
|
|
44
36
|
const lastElementInStack = stack[stack.length - 1];
|
|
45
|
-
|
|
46
37
|
if (stack.length === 0 || !lastElementInStack) {
|
|
47
38
|
return;
|
|
48
39
|
}
|
|
49
|
-
|
|
50
40
|
context.report({
|
|
51
41
|
data: {
|
|
52
42
|
condition: conditionName[node.type]
|
|
@@ -55,57 +45,43 @@ var _default = (0, _utils2.createRule)({
|
|
|
55
45
|
node
|
|
56
46
|
});
|
|
57
47
|
}
|
|
58
|
-
|
|
59
48
|
return {
|
|
60
49
|
CallExpression(node) {
|
|
61
50
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
62
|
-
|
|
63
51
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'test') {
|
|
64
52
|
stack.push(true);
|
|
65
|
-
|
|
66
53
|
if (jestFnCall.members.some(s => (0, _utils2.getAccessorValue)(s) === 'each')) {
|
|
67
54
|
stack.push(true);
|
|
68
55
|
}
|
|
69
56
|
}
|
|
70
57
|
},
|
|
71
|
-
|
|
72
58
|
FunctionExpression(node) {
|
|
73
59
|
stack.push(isTestFunctionExpression(node));
|
|
74
60
|
},
|
|
75
|
-
|
|
76
61
|
FunctionDeclaration(node) {
|
|
77
62
|
const declaredVariables = context.getDeclaredVariables(node);
|
|
78
63
|
const testCallExpressions = (0, _utils2.getTestCallExpressionsFromDeclaredVariables)(declaredVariables, context);
|
|
79
64
|
stack.push(testCallExpressions.length > 0);
|
|
80
65
|
},
|
|
81
|
-
|
|
82
66
|
ArrowFunctionExpression(node) {
|
|
83
67
|
stack.push(isTestFunctionExpression(node));
|
|
84
68
|
},
|
|
85
|
-
|
|
86
69
|
IfStatement: validate,
|
|
87
70
|
SwitchStatement: validate,
|
|
88
71
|
ConditionalExpression: validate,
|
|
89
|
-
|
|
90
72
|
'CallExpression:exit'() {
|
|
91
73
|
stack.pop();
|
|
92
74
|
},
|
|
93
|
-
|
|
94
75
|
'FunctionExpression:exit'() {
|
|
95
76
|
stack.pop();
|
|
96
77
|
},
|
|
97
|
-
|
|
98
78
|
'FunctionDeclaration:exit'() {
|
|
99
79
|
stack.pop();
|
|
100
80
|
},
|
|
101
|
-
|
|
102
81
|
'ArrowFunctionExpression:exit'() {
|
|
103
82
|
stack.pop();
|
|
104
83
|
}
|
|
105
|
-
|
|
106
84
|
};
|
|
107
85
|
}
|
|
108
|
-
|
|
109
86
|
});
|
|
110
|
-
|
|
111
87
|
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: {
|
|
@@ -24,16 +21,13 @@ var _default = (0, _utils2.createRule)({
|
|
|
24
21
|
type: 'problem'
|
|
25
22
|
},
|
|
26
23
|
defaultOptions: [],
|
|
27
|
-
|
|
28
24
|
create(context) {
|
|
29
25
|
return {
|
|
30
26
|
CallExpression(node) {
|
|
31
27
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
32
|
-
|
|
33
28
|
if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'expect') {
|
|
34
29
|
return;
|
|
35
30
|
}
|
|
36
|
-
|
|
37
31
|
if (['toMatchInlineSnapshot', 'toThrowErrorMatchingInlineSnapshot'].includes((0, _utils2.getAccessorValue)(jestFnCall.matcher))) {
|
|
38
32
|
// Check all since the optional 'propertyMatchers' argument might be present
|
|
39
33
|
jestFnCall.args.forEach(argument => {
|
|
@@ -46,10 +40,7 @@ var _default = (0, _utils2.createRule)({
|
|
|
46
40
|
});
|
|
47
41
|
}
|
|
48
42
|
}
|
|
49
|
-
|
|
50
43
|
};
|
|
51
44
|
}
|
|
52
|
-
|
|
53
45
|
});
|
|
54
|
-
|
|
55
46
|
exports.default = _default;
|