eslint-plugin-jest 24.4.2 → 26.1.0
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 +75 -50
- package/docs/rules/expect-expect.md +42 -1
- package/docs/rules/max-nested-describe.md +4 -5
- package/docs/rules/no-conditional-expect.md +57 -3
- package/docs/rules/no-conditional-in-test.md +79 -0
- package/docs/rules/no-deprecated-functions.md +5 -0
- package/docs/rules/no-done-callback.md +3 -3
- package/docs/rules/no-if.md +5 -0
- package/docs/rules/no-standalone-expect.md +3 -3
- package/docs/rules/no-test-return-statement.md +1 -2
- package/docs/rules/prefer-comparison-matcher.md +55 -0
- package/docs/rules/prefer-equality-matcher.md +29 -0
- package/docs/rules/prefer-expect-assertions.md +126 -0
- package/docs/rules/prefer-expect-resolves.md +53 -0
- package/docs/rules/prefer-hooks-on-top.md +72 -48
- package/docs/rules/{lowercase-name.md → prefer-lowercase-title.md} +7 -7
- package/docs/rules/prefer-snapshot-hint.md +188 -0
- package/docs/rules/prefer-to-be.md +53 -0
- package/docs/rules/require-hook.md +187 -0
- package/docs/rules/require-top-level-describe.md +28 -0
- package/docs/rules/{valid-describe.md → valid-describe-callback.md} +1 -1
- package/docs/rules/valid-expect-in-promise.md +55 -14
- package/docs/rules/valid-expect.md +13 -0
- package/docs/rules/valid-title.md +30 -2
- package/lib/index.js +2 -3
- package/lib/processors/snapshot-processor.js +1 -1
- package/lib/rules/consistent-test-it.js +20 -20
- package/lib/rules/detectJestVersion.js +29 -0
- package/lib/rules/expect-expect.js +25 -11
- package/lib/rules/max-nested-describe.js +5 -5
- package/lib/rules/no-conditional-expect.js +9 -9
- package/lib/rules/no-conditional-in-test.js +60 -0
- package/lib/rules/no-deprecated-functions.js +14 -32
- package/lib/rules/no-done-callback.js +10 -10
- package/lib/rules/no-export.js +6 -6
- package/lib/rules/no-focused-tests.js +11 -11
- package/lib/rules/no-identical-title.js +3 -3
- package/lib/rules/no-if.js +13 -11
- package/lib/rules/no-interpolation-in-snapshots.js +6 -6
- package/lib/rules/no-jasmine-globals.js +10 -10
- package/lib/rules/no-large-snapshots.js +11 -11
- package/lib/rules/no-standalone-expect.js +14 -14
- package/lib/rules/no-test-prefixes.js +6 -6
- package/lib/rules/no-test-return-statement.js +8 -8
- package/lib/rules/prefer-comparison-matcher.js +139 -0
- package/lib/rules/prefer-equality-matcher.js +98 -0
- package/lib/rules/prefer-expect-assertions.js +93 -11
- package/lib/rules/prefer-expect-resolves.js +48 -0
- package/lib/rules/prefer-hooks-on-top.js +1 -1
- package/lib/rules/{lowercase-name.js → prefer-lowercase-title.js} +20 -1
- package/lib/rules/prefer-snapshot-hint.js +112 -0
- package/lib/rules/prefer-spy-on.js +9 -9
- package/lib/rules/prefer-to-be.js +136 -0
- package/lib/rules/prefer-to-contain.js +19 -67
- package/lib/rules/prefer-to-have-length.js +9 -14
- package/lib/rules/prefer-todo.js +9 -9
- package/lib/rules/require-hook.js +121 -0
- package/lib/rules/require-top-level-describe.js +40 -6
- package/lib/rules/utils.js +34 -30
- package/lib/rules/{valid-describe.js → valid-describe-callback.js} +9 -9
- package/lib/rules/valid-expect-in-promise.js +336 -67
- package/lib/rules/valid-expect.js +36 -19
- package/lib/rules/valid-title.js +61 -61
- package/package.json +40 -27
- package/CHANGELOG.md +0 -513
- package/docs/rules/no-expect-resolves.md +0 -47
- package/docs/rules/no-truthy-falsy.md +0 -53
- package/docs/rules/no-try-expect.md +0 -63
- package/docs/rules/prefer-inline-snapshots.md +0 -51
- package/docs/rules/prefer-to-be-null.md +0 -33
- package/docs/rules/prefer-to-be-undefined.md +0 -33
- package/lib/rules/no-expect-resolves.js +0 -40
- package/lib/rules/no-truthy-falsy.js +0 -58
- package/lib/rules/no-try-expect.js +0 -89
- package/lib/rules/prefer-inline-snapshots.js +0 -69
- package/lib/rules/prefer-to-be-null.js +0 -67
- package/lib/rules/prefer-to-be-undefined.js +0 -67
|
@@ -7,6 +7,12 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _utils = require("./utils");
|
|
9
9
|
|
|
10
|
+
const messages = {
|
|
11
|
+
tooManyDescribes: 'There should not be more than {{ max }} describe{{ s }} at the top level',
|
|
12
|
+
unexpectedTestCase: 'All test cases must be wrapped in a describe block.',
|
|
13
|
+
unexpectedHook: 'All hooks must be wrapped in a describe block.'
|
|
14
|
+
};
|
|
15
|
+
|
|
10
16
|
var _default = (0, _utils.createRule)({
|
|
11
17
|
name: __filename,
|
|
12
18
|
meta: {
|
|
@@ -15,21 +21,49 @@ var _default = (0, _utils.createRule)({
|
|
|
15
21
|
description: 'Require test cases and hooks to be inside a `describe` block',
|
|
16
22
|
recommended: false
|
|
17
23
|
},
|
|
18
|
-
messages
|
|
19
|
-
unexpectedTestCase: 'All test cases must be wrapped in a describe block.',
|
|
20
|
-
unexpectedHook: 'All hooks must be wrapped in a describe block.'
|
|
21
|
-
},
|
|
24
|
+
messages,
|
|
22
25
|
type: 'suggestion',
|
|
23
|
-
schema: [
|
|
26
|
+
schema: [{
|
|
27
|
+
type: 'object',
|
|
28
|
+
properties: {
|
|
29
|
+
maxNumberOfTopLevelDescribes: {
|
|
30
|
+
type: 'number',
|
|
31
|
+
minimum: 1
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
additionalProperties: false
|
|
35
|
+
}]
|
|
24
36
|
},
|
|
25
|
-
defaultOptions: [],
|
|
37
|
+
defaultOptions: [{}],
|
|
26
38
|
|
|
27
39
|
create(context) {
|
|
40
|
+
var _context$options$;
|
|
41
|
+
|
|
42
|
+
const {
|
|
43
|
+
maxNumberOfTopLevelDescribes = Infinity
|
|
44
|
+
} = (_context$options$ = context.options[0]) !== null && _context$options$ !== void 0 ? _context$options$ : {};
|
|
45
|
+
let numberOfTopLevelDescribeBlocks = 0;
|
|
28
46
|
let numberOfDescribeBlocks = 0;
|
|
29
47
|
return {
|
|
30
48
|
CallExpression(node) {
|
|
31
49
|
if ((0, _utils.isDescribeCall)(node)) {
|
|
32
50
|
numberOfDescribeBlocks++;
|
|
51
|
+
|
|
52
|
+
if (numberOfDescribeBlocks === 1) {
|
|
53
|
+
numberOfTopLevelDescribeBlocks++;
|
|
54
|
+
|
|
55
|
+
if (numberOfTopLevelDescribeBlocks > maxNumberOfTopLevelDescribes) {
|
|
56
|
+
context.report({
|
|
57
|
+
node,
|
|
58
|
+
messageId: 'tooManyDescribes',
|
|
59
|
+
data: {
|
|
60
|
+
max: maxNumberOfTopLevelDescribes,
|
|
61
|
+
s: maxNumberOfTopLevelDescribes === 1 ? '' : 's'
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
33
67
|
return;
|
|
34
68
|
}
|
|
35
69
|
|
package/lib/rules/utils.js
CHANGED
|
@@ -3,25 +3,26 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.getAccessorValue = exports.followTypeAssertionChain = exports.createRule = exports.TestCaseProperty = exports.TestCaseName = exports.ModifierName = exports.HookName = exports.EqualityMatcher = exports.DescribeProperty = exports.DescribeAlias = void 0;
|
|
6
7
|
exports.getNodeName = getNodeName;
|
|
7
|
-
exports.scopeHasLocalReference = exports.
|
|
8
|
+
exports.scopeHasLocalReference = exports.parseExpectCall = exports.isTestCaseCall = exports.isSupportedAccessor = exports.isStringNode = exports.isParsedEqualityMatcherCall = exports.isIdentifier = exports.isHook = exports.isFunction = exports.isExpectMember = exports.isExpectCall = exports.isDescribeCall = exports.hasOnlyOneArgument = exports.getTestCallExpressionsFromDeclaredVariables = exports.getStringValue = void 0;
|
|
8
9
|
|
|
9
10
|
var _path = require("path");
|
|
10
11
|
|
|
11
|
-
var
|
|
12
|
+
var _utils = require("@typescript-eslint/utils");
|
|
12
13
|
|
|
13
14
|
var _package = require("../../package.json");
|
|
14
15
|
|
|
15
16
|
const REPO_URL = 'https://github.com/jest-community/eslint-plugin-jest';
|
|
16
17
|
|
|
17
|
-
const createRule =
|
|
18
|
+
const createRule = _utils.ESLintUtils.RuleCreator(name => {
|
|
18
19
|
const ruleName = (0, _path.parse)(name).name;
|
|
19
20
|
return `${REPO_URL}/blob/v${_package.version}/docs/rules/${ruleName}.md`;
|
|
20
21
|
});
|
|
21
22
|
|
|
22
23
|
exports.createRule = createRule;
|
|
23
24
|
|
|
24
|
-
const isTypeCastExpression = node => node.type ===
|
|
25
|
+
const isTypeCastExpression = node => node.type === _utils.AST_NODE_TYPES.TSAsExpression || node.type === _utils.AST_NODE_TYPES.TSTypeAssertion;
|
|
25
26
|
|
|
26
27
|
const followTypeAssertionChain = expression => isTypeCastExpression(expression) ? followTypeAssertionChain(expression.expression) : expression;
|
|
27
28
|
/**
|
|
@@ -44,7 +45,7 @@ exports.followTypeAssertionChain = followTypeAssertionChain;
|
|
|
44
45
|
*
|
|
45
46
|
* @template V
|
|
46
47
|
*/
|
|
47
|
-
const isStringLiteral = (node, value) => node.type ===
|
|
48
|
+
const isStringLiteral = (node, value) => node.type === _utils.AST_NODE_TYPES.Literal && typeof node.value === 'string' && (value === undefined || node.value === value);
|
|
48
49
|
|
|
49
50
|
/**
|
|
50
51
|
* Checks if the given `node` is a `TemplateLiteral`.
|
|
@@ -61,7 +62,8 @@ const isStringLiteral = (node, value) => node.type === _experimentalUtils.AST_NO
|
|
|
61
62
|
*
|
|
62
63
|
* @template V
|
|
63
64
|
*/
|
|
64
|
-
const isTemplateLiteral = (node, value) => node.type ===
|
|
65
|
+
const isTemplateLiteral = (node, value) => node.type === _utils.AST_NODE_TYPES.TemplateLiteral && node.quasis.length === 1 && ( // bail out if not simple
|
|
66
|
+
value === undefined || node.quasis[0].value.raw === value);
|
|
65
67
|
|
|
66
68
|
/**
|
|
67
69
|
* Checks if the given `node` is a {@link StringNode}.
|
|
@@ -126,7 +128,7 @@ exports.hasOnlyOneArgument = hasOnlyOneArgument;
|
|
|
126
128
|
*
|
|
127
129
|
* @template V
|
|
128
130
|
*/
|
|
129
|
-
const isIdentifier = (node, name) => node.type ===
|
|
131
|
+
const isIdentifier = (node, name) => node.type === _utils.AST_NODE_TYPES.Identifier && (name === undefined || node.name === name);
|
|
130
132
|
/**
|
|
131
133
|
* Checks if the given `node` is a "supported accessor".
|
|
132
134
|
*
|
|
@@ -151,6 +153,8 @@ const isIdentifier = (node, name) => node.type === _experimentalUtils.AST_NODE_T
|
|
|
151
153
|
*/
|
|
152
154
|
|
|
153
155
|
|
|
156
|
+
exports.isIdentifier = isIdentifier;
|
|
157
|
+
|
|
154
158
|
const isSupportedAccessor = (node, value) => isIdentifier(node, value) || isStringNode(node, value);
|
|
155
159
|
/**
|
|
156
160
|
* Gets the value of the given `AccessorNode`,
|
|
@@ -166,7 +170,7 @@ const isSupportedAccessor = (node, value) => isIdentifier(node, value) || isStri
|
|
|
166
170
|
|
|
167
171
|
exports.isSupportedAccessor = isSupportedAccessor;
|
|
168
172
|
|
|
169
|
-
const getAccessorValue = accessor => accessor.type ===
|
|
173
|
+
const getAccessorValue = accessor => accessor.type === _utils.AST_NODE_TYPES.Identifier ? accessor.name : getStringValue(accessor);
|
|
170
174
|
|
|
171
175
|
exports.getAccessorValue = getAccessorValue;
|
|
172
176
|
|
|
@@ -182,11 +186,11 @@ exports.getAccessorValue = getAccessorValue;
|
|
|
182
186
|
*
|
|
183
187
|
* @return {node is ExpectCall}
|
|
184
188
|
*/
|
|
185
|
-
const isExpectCall = node => node.type ===
|
|
189
|
+
const isExpectCall = node => node.type === _utils.AST_NODE_TYPES.CallExpression && isSupportedAccessor(node.callee, 'expect') && node.parent !== undefined;
|
|
186
190
|
|
|
187
191
|
exports.isExpectCall = isExpectCall;
|
|
188
192
|
|
|
189
|
-
const isExpectMember = (node, name) => node.type ===
|
|
193
|
+
const isExpectMember = (node, name) => node.type === _utils.AST_NODE_TYPES.MemberExpression && isSupportedAccessor(node.property, name);
|
|
190
194
|
/**
|
|
191
195
|
* Represents all the jest matchers.
|
|
192
196
|
*/
|
|
@@ -231,7 +235,7 @@ const reparseAsMatcher = parsedMember => ({ ...parsedMember,
|
|
|
231
235
|
*
|
|
232
236
|
* If this matcher isn't called, this will be `null`.
|
|
233
237
|
*/
|
|
234
|
-
arguments: parsedMember.node.parent
|
|
238
|
+
arguments: parsedMember.node.parent.type === _utils.AST_NODE_TYPES.CallExpression ? parsedMember.node.parent.arguments : null
|
|
235
239
|
});
|
|
236
240
|
/**
|
|
237
241
|
* Re-parses the given `parsedMember` as a `ParsedExpectModifier`.
|
|
@@ -258,7 +262,7 @@ const reparseMemberAsModifier = parsedMember => {
|
|
|
258
262
|
throw new Error(`modifier name must be either "${ModifierName.resolves}" or "${ModifierName.rejects}" (got "${parsedMember.name}")`);
|
|
259
263
|
}
|
|
260
264
|
|
|
261
|
-
const negation =
|
|
265
|
+
const negation = isExpectMember(parsedMember.node.parent, ModifierName.not) ? parsedMember.node.parent : undefined;
|
|
262
266
|
return { ...parsedMember,
|
|
263
267
|
negation
|
|
264
268
|
};
|
|
@@ -295,7 +299,7 @@ const parseExpectCall = expect => {
|
|
|
295
299
|
const modifier = expectation.modifier = reparseMemberAsModifier(parsedMember);
|
|
296
300
|
const memberNode = modifier.negation || modifier.node;
|
|
297
301
|
|
|
298
|
-
if (!
|
|
302
|
+
if (!isExpectMember(memberNode.parent)) {
|
|
299
303
|
return expectation;
|
|
300
304
|
}
|
|
301
305
|
|
|
@@ -362,25 +366,25 @@ function getNodeName(node) {
|
|
|
362
366
|
}
|
|
363
367
|
|
|
364
368
|
switch (node.type) {
|
|
365
|
-
case
|
|
369
|
+
case _utils.AST_NODE_TYPES.TaggedTemplateExpression:
|
|
366
370
|
return getNodeName(node.tag);
|
|
367
371
|
|
|
368
|
-
case
|
|
372
|
+
case _utils.AST_NODE_TYPES.MemberExpression:
|
|
369
373
|
return joinNames(getNodeName(node.object), getNodeName(node.property));
|
|
370
374
|
|
|
371
|
-
case
|
|
372
|
-
case
|
|
375
|
+
case _utils.AST_NODE_TYPES.NewExpression:
|
|
376
|
+
case _utils.AST_NODE_TYPES.CallExpression:
|
|
373
377
|
return getNodeName(node.callee);
|
|
374
378
|
}
|
|
375
379
|
|
|
376
380
|
return null;
|
|
377
381
|
}
|
|
378
382
|
|
|
379
|
-
const isFunction = node => node.type ===
|
|
383
|
+
const isFunction = node => node.type === _utils.AST_NODE_TYPES.FunctionExpression || node.type === _utils.AST_NODE_TYPES.ArrowFunctionExpression;
|
|
380
384
|
|
|
381
385
|
exports.isFunction = isFunction;
|
|
382
386
|
|
|
383
|
-
const isHook = node => node.callee.type ===
|
|
387
|
+
const isHook = node => node.callee.type === _utils.AST_NODE_TYPES.Identifier && HookName.hasOwnProperty(node.callee.name);
|
|
384
388
|
|
|
385
389
|
exports.isHook = isHook;
|
|
386
390
|
|
|
@@ -389,12 +393,12 @@ const getTestCallExpressionsFromDeclaredVariables = declaredVariables => {
|
|
|
389
393
|
references
|
|
390
394
|
}) => acc.concat(references.map(({
|
|
391
395
|
identifier
|
|
392
|
-
}) => identifier.parent).filter(node => !!node && node.type ===
|
|
396
|
+
}) => identifier.parent).filter(node => !!node && node.type === _utils.AST_NODE_TYPES.CallExpression && isTestCaseCall(node))), []);
|
|
393
397
|
};
|
|
394
398
|
|
|
395
399
|
exports.getTestCallExpressionsFromDeclaredVariables = getTestCallExpressionsFromDeclaredVariables;
|
|
396
400
|
|
|
397
|
-
const isTestCaseName = node => node.type ===
|
|
401
|
+
const isTestCaseName = node => node.type === _utils.AST_NODE_TYPES.Identifier && TestCaseName.hasOwnProperty(node.name);
|
|
398
402
|
|
|
399
403
|
const isTestCaseProperty = node => isSupportedAccessor(node) && TestCaseProperty.hasOwnProperty(getAccessorValue(node));
|
|
400
404
|
/**
|
|
@@ -415,15 +419,15 @@ const isTestCaseCall = node => {
|
|
|
415
419
|
return true;
|
|
416
420
|
}
|
|
417
421
|
|
|
418
|
-
const callee = node.callee.type ===
|
|
422
|
+
const callee = node.callee.type === _utils.AST_NODE_TYPES.TaggedTemplateExpression ? node.callee.tag : node.callee.type === _utils.AST_NODE_TYPES.CallExpression ? node.callee.callee : node.callee;
|
|
419
423
|
|
|
420
|
-
if (callee.type ===
|
|
424
|
+
if (callee.type === _utils.AST_NODE_TYPES.MemberExpression && isTestCaseProperty(callee.property)) {
|
|
421
425
|
// if we're an `each()`, ensure we're the outer CallExpression (i.e `.each()()`)
|
|
422
|
-
if (getAccessorValue(callee.property) === 'each' && node.callee.type !==
|
|
426
|
+
if (getAccessorValue(callee.property) === 'each' && node.callee.type !== _utils.AST_NODE_TYPES.TaggedTemplateExpression && node.callee.type !== _utils.AST_NODE_TYPES.CallExpression) {
|
|
423
427
|
return false;
|
|
424
428
|
}
|
|
425
429
|
|
|
426
|
-
return callee.object.type ===
|
|
430
|
+
return callee.object.type === _utils.AST_NODE_TYPES.MemberExpression ? isTestCaseName(callee.object.object) : isTestCaseName(callee.object);
|
|
427
431
|
}
|
|
428
432
|
|
|
429
433
|
return false;
|
|
@@ -431,7 +435,7 @@ const isTestCaseCall = node => {
|
|
|
431
435
|
|
|
432
436
|
exports.isTestCaseCall = isTestCaseCall;
|
|
433
437
|
|
|
434
|
-
const isDescribeAlias = node => node.type ===
|
|
438
|
+
const isDescribeAlias = node => node.type === _utils.AST_NODE_TYPES.Identifier && DescribeAlias.hasOwnProperty(node.name);
|
|
435
439
|
|
|
436
440
|
const isDescribeProperty = node => isSupportedAccessor(node) && DescribeProperty.hasOwnProperty(getAccessorValue(node));
|
|
437
441
|
/**
|
|
@@ -452,15 +456,15 @@ const isDescribeCall = node => {
|
|
|
452
456
|
return true;
|
|
453
457
|
}
|
|
454
458
|
|
|
455
|
-
const callee = node.callee.type ===
|
|
459
|
+
const callee = node.callee.type === _utils.AST_NODE_TYPES.TaggedTemplateExpression ? node.callee.tag : node.callee.type === _utils.AST_NODE_TYPES.CallExpression ? node.callee.callee : node.callee;
|
|
456
460
|
|
|
457
|
-
if (callee.type ===
|
|
461
|
+
if (callee.type === _utils.AST_NODE_TYPES.MemberExpression && isDescribeProperty(callee.property)) {
|
|
458
462
|
// if we're an `each()`, ensure we're the outer CallExpression (i.e `.each()()`)
|
|
459
|
-
if (getAccessorValue(callee.property) === 'each' && node.callee.type !==
|
|
463
|
+
if (getAccessorValue(callee.property) === 'each' && node.callee.type !== _utils.AST_NODE_TYPES.TaggedTemplateExpression && node.callee.type !== _utils.AST_NODE_TYPES.CallExpression) {
|
|
460
464
|
return false;
|
|
461
465
|
}
|
|
462
466
|
|
|
463
|
-
return callee.object.type ===
|
|
467
|
+
return callee.object.type === _utils.AST_NODE_TYPES.MemberExpression ? isDescribeAlias(callee.object.object) : isDescribeAlias(callee.object);
|
|
464
468
|
}
|
|
465
469
|
|
|
466
470
|
return false;
|
|
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _utils = require("@typescript-eslint/utils");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _utils2 = require("./utils");
|
|
11
11
|
|
|
12
12
|
const paramsLocation = params => {
|
|
13
13
|
const [first] = params;
|
|
@@ -18,7 +18,7 @@ const paramsLocation = params => {
|
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
var _default = (0,
|
|
21
|
+
var _default = (0, _utils2.createRule)({
|
|
22
22
|
name: __filename,
|
|
23
23
|
meta: {
|
|
24
24
|
type: 'problem',
|
|
@@ -41,7 +41,7 @@ var _default = (0, _utils.createRule)({
|
|
|
41
41
|
create(context) {
|
|
42
42
|
return {
|
|
43
43
|
CallExpression(node) {
|
|
44
|
-
if (!(0,
|
|
44
|
+
if (!(0, _utils2.isDescribeCall)(node)) {
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -62,7 +62,7 @@ var _default = (0, _utils.createRule)({
|
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
if (!(0,
|
|
65
|
+
if (!(0, _utils2.isFunction)(callback)) {
|
|
66
66
|
context.report({
|
|
67
67
|
messageId: 'secondArgumentMustBeFunction',
|
|
68
68
|
loc: paramsLocation(node.arguments)
|
|
@@ -77,23 +77,23 @@ var _default = (0, _utils.createRule)({
|
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
if (!(0,
|
|
80
|
+
if (!(0, _utils2.getNodeName)(node).endsWith('each') && callback.params.length) {
|
|
81
81
|
context.report({
|
|
82
82
|
messageId: 'unexpectedDescribeArgument',
|
|
83
83
|
loc: paramsLocation(callback.params)
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
if (callback.body.type ===
|
|
87
|
+
if (callback.body.type === _utils.AST_NODE_TYPES.CallExpression) {
|
|
88
88
|
context.report({
|
|
89
89
|
messageId: 'unexpectedReturnInDescribe',
|
|
90
90
|
node: callback
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
if (callback.body.type ===
|
|
94
|
+
if (callback.body.type === _utils.AST_NODE_TYPES.BlockStatement) {
|
|
95
95
|
callback.body.body.forEach(node => {
|
|
96
|
-
if (node.type ===
|
|
96
|
+
if (node.type === _utils.AST_NODE_TYPES.ReturnStatement) {
|
|
97
97
|
context.report({
|
|
98
98
|
messageId: 'unexpectedReturnInDescribe',
|
|
99
99
|
node
|