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,35 +4,27 @@ 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: {
|
|
33
25
|
docs: {
|
|
34
26
|
category: 'Best Practices',
|
|
35
|
-
description: '
|
|
27
|
+
description: 'Disallow using a callback in asynchronous tests and hooks',
|
|
36
28
|
recommended: 'error'
|
|
37
29
|
},
|
|
38
30
|
messages: {
|
|
@@ -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;
|
|
@@ -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: {
|
|
@@ -29,7 +26,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
29
26
|
type: 'suggestion'
|
|
30
27
|
},
|
|
31
28
|
defaultOptions: [],
|
|
32
|
-
|
|
33
29
|
create(context) {
|
|
34
30
|
return {
|
|
35
31
|
CallExpression(node) {
|
|
@@ -37,17 +33,14 @@ var _default = (0, _utils2.createRule)({
|
|
|
37
33
|
callee
|
|
38
34
|
} = node;
|
|
39
35
|
const calleeName = (0, _utils2.getNodeName)(callee);
|
|
40
|
-
|
|
41
36
|
if (!calleeName) {
|
|
42
37
|
return;
|
|
43
38
|
}
|
|
44
|
-
|
|
45
39
|
if (calleeName === 'spyOn' || calleeName === 'spyOnProperty' || calleeName === 'fail' || calleeName === 'pending') {
|
|
46
40
|
if ((0, _utils2.scopeHasLocalReference)(context.getScope(), calleeName)) {
|
|
47
41
|
// It's a local variable, not a jasmine global.
|
|
48
42
|
return;
|
|
49
43
|
}
|
|
50
|
-
|
|
51
44
|
switch (calleeName) {
|
|
52
45
|
case 'spyOn':
|
|
53
46
|
case 'spyOnProperty':
|
|
@@ -60,14 +53,12 @@ var _default = (0, _utils2.createRule)({
|
|
|
60
53
|
}
|
|
61
54
|
});
|
|
62
55
|
break;
|
|
63
|
-
|
|
64
56
|
case 'fail':
|
|
65
57
|
context.report({
|
|
66
58
|
node,
|
|
67
59
|
messageId: 'illegalFail'
|
|
68
60
|
});
|
|
69
61
|
break;
|
|
70
|
-
|
|
71
62
|
case 'pending':
|
|
72
63
|
context.report({
|
|
73
64
|
node,
|
|
@@ -75,13 +66,10 @@ var _default = (0, _utils2.createRule)({
|
|
|
75
66
|
});
|
|
76
67
|
break;
|
|
77
68
|
}
|
|
78
|
-
|
|
79
69
|
return;
|
|
80
70
|
}
|
|
81
|
-
|
|
82
71
|
if (callee.type === _utils.AST_NODE_TYPES.MemberExpression && calleeName.startsWith('jasmine.')) {
|
|
83
72
|
const functionName = calleeName.replace('jasmine.', '');
|
|
84
|
-
|
|
85
73
|
if (functionName === 'any' || functionName === 'anything' || functionName === 'arrayContaining' || functionName === 'objectContaining' || functionName === 'stringMatching') {
|
|
86
74
|
context.report({
|
|
87
75
|
fix: fixer => [fixer.replaceText(callee.object, 'expect')],
|
|
@@ -94,7 +82,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
94
82
|
});
|
|
95
83
|
return;
|
|
96
84
|
}
|
|
97
|
-
|
|
98
85
|
if (functionName === 'addMatchers') {
|
|
99
86
|
context.report({
|
|
100
87
|
node,
|
|
@@ -106,7 +93,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
106
93
|
});
|
|
107
94
|
return;
|
|
108
95
|
}
|
|
109
|
-
|
|
110
96
|
if (functionName === 'createSpy') {
|
|
111
97
|
context.report({
|
|
112
98
|
node,
|
|
@@ -118,27 +104,23 @@ var _default = (0, _utils2.createRule)({
|
|
|
118
104
|
});
|
|
119
105
|
return;
|
|
120
106
|
}
|
|
121
|
-
|
|
122
107
|
context.report({
|
|
123
108
|
node,
|
|
124
109
|
messageId: 'illegalJasmine'
|
|
125
110
|
});
|
|
126
111
|
}
|
|
127
112
|
},
|
|
128
|
-
|
|
129
113
|
MemberExpression(node) {
|
|
130
114
|
if ((0, _utils2.isSupportedAccessor)(node.object, 'jasmine')) {
|
|
131
115
|
const {
|
|
132
116
|
parent,
|
|
133
117
|
property
|
|
134
118
|
} = node;
|
|
135
|
-
|
|
136
119
|
if (parent && parent.type === _utils.AST_NODE_TYPES.AssignmentExpression) {
|
|
137
120
|
if ((0, _utils2.isSupportedAccessor)(property, 'DEFAULT_TIMEOUT_INTERVAL')) {
|
|
138
121
|
const {
|
|
139
122
|
right
|
|
140
123
|
} = parent;
|
|
141
|
-
|
|
142
124
|
if (right.type === _utils.AST_NODE_TYPES.Literal) {
|
|
143
125
|
context.report({
|
|
144
126
|
fix: fixer => [fixer.replaceText(parent, `jest.setTimeout(${right.value})`)],
|
|
@@ -148,7 +130,6 @@ var _default = (0, _utils2.createRule)({
|
|
|
148
130
|
return;
|
|
149
131
|
}
|
|
150
132
|
}
|
|
151
|
-
|
|
152
133
|
context.report({
|
|
153
134
|
node,
|
|
154
135
|
messageId: 'illegalJasmine'
|
|
@@ -156,10 +137,7 @@ var _default = (0, _utils2.createRule)({
|
|
|
156
137
|
}
|
|
157
138
|
}
|
|
158
139
|
}
|
|
159
|
-
|
|
160
140
|
};
|
|
161
141
|
}
|
|
162
|
-
|
|
163
142
|
});
|
|
164
|
-
|
|
165
143
|
exports.default = _default;
|