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.
Files changed (112) hide show
  1. package/README.md +81 -80
  2. package/docs/rules/consistent-test-it.md +4 -11
  3. package/docs/rules/expect-expect.md +3 -4
  4. package/docs/rules/max-expects.md +1 -5
  5. package/docs/rules/max-nested-describe.md +1 -5
  6. package/docs/rules/no-alias-methods.md +8 -10
  7. package/docs/rules/no-commented-out-tests.md +3 -4
  8. package/docs/rules/no-conditional-expect.md +4 -5
  9. package/docs/rules/no-conditional-in-test.md +1 -5
  10. package/docs/rules/no-deprecated-functions.md +5 -7
  11. package/docs/rules/no-disabled-tests.md +3 -4
  12. package/docs/rules/no-done-callback.md +6 -8
  13. package/docs/rules/no-duplicate-hooks.md +1 -5
  14. package/docs/rules/no-export.md +3 -4
  15. package/docs/rules/no-focused-tests.md +5 -7
  16. package/docs/rules/no-hooks.md +1 -5
  17. package/docs/rules/no-identical-title.md +3 -4
  18. package/docs/rules/no-if.md +2 -2
  19. package/docs/rules/no-interpolation-in-snapshots.md +3 -4
  20. package/docs/rules/no-jasmine-globals.md +6 -8
  21. package/docs/rules/no-large-snapshots.md +2 -6
  22. package/docs/rules/no-mocks-import.md +3 -4
  23. package/docs/rules/no-restricted-jest-methods.md +1 -5
  24. package/docs/rules/no-restricted-matchers.md +1 -5
  25. package/docs/rules/no-standalone-expect.md +3 -4
  26. package/docs/rules/no-test-prefixes.md +6 -8
  27. package/docs/rules/no-test-return-statement.md +1 -5
  28. package/docs/rules/prefer-called-with.md +1 -5
  29. package/docs/rules/prefer-comparison-matcher.md +3 -8
  30. package/docs/rules/prefer-each.md +1 -5
  31. package/docs/rules/prefer-equality-matcher.md +3 -8
  32. package/docs/rules/prefer-expect-assertions.md +3 -10
  33. package/docs/rules/prefer-expect-resolves.md +3 -8
  34. package/docs/rules/prefer-hooks-in-order.md +1 -5
  35. package/docs/rules/prefer-hooks-on-top.md +1 -5
  36. package/docs/rules/prefer-lowercase-title.md +3 -8
  37. package/docs/rules/prefer-mock-promise-shorthand.md +3 -8
  38. package/docs/rules/prefer-snapshot-hint.md +1 -5
  39. package/docs/rules/prefer-spy-on.md +3 -10
  40. package/docs/rules/prefer-strict-equal.md +3 -10
  41. package/docs/rules/prefer-to-be.md +5 -7
  42. package/docs/rules/prefer-to-contain.md +5 -9
  43. package/docs/rules/prefer-to-have-length.md +5 -9
  44. package/docs/rules/prefer-todo.md +3 -10
  45. package/docs/rules/require-hook.md +1 -5
  46. package/docs/rules/require-to-throw-message.md +1 -7
  47. package/docs/rules/require-top-level-describe.md +1 -5
  48. package/docs/rules/unbound-method.md +2 -4
  49. package/docs/rules/valid-describe-callback.md +3 -4
  50. package/docs/rules/valid-expect-in-promise.md +4 -5
  51. package/docs/rules/valid-expect.md +3 -6
  52. package/docs/rules/valid-title.md +5 -7
  53. package/lib/index.js +8 -16
  54. package/lib/processors/snapshot-processor.js +3 -5
  55. package/lib/rules/consistent-test-it.js +1 -19
  56. package/lib/rules/expect-expect.js +0 -15
  57. package/lib/rules/max-expects.js +0 -16
  58. package/lib/rules/max-nested-describe.js +0 -13
  59. package/lib/rules/no-alias-methods.js +0 -9
  60. package/lib/rules/no-commented-out-tests.js +0 -10
  61. package/lib/rules/no-conditional-expect.js +1 -20
  62. package/lib/rules/no-conditional-in-test.js +0 -9
  63. package/lib/rules/no-deprecated-functions.js +2 -18
  64. package/lib/rules/no-disabled-tests.js +2 -18
  65. package/lib/rules/no-done-callback.js +2 -31
  66. package/lib/rules/no-duplicate-hooks.js +0 -12
  67. package/lib/rules/no-export.js +0 -12
  68. package/lib/rules/no-focused-tests.js +0 -15
  69. package/lib/rules/no-hooks.js +0 -7
  70. package/lib/rules/no-identical-title.js +0 -19
  71. package/lib/rules/no-if.js +0 -24
  72. package/lib/rules/no-interpolation-in-snapshots.js +0 -9
  73. package/lib/rules/no-jasmine-globals.js +0 -22
  74. package/lib/rules/no-large-snapshots.js +3 -21
  75. package/lib/rules/no-mocks-import.js +0 -12
  76. package/lib/rules/no-restricted-jest-methods.js +1 -11
  77. package/lib/rules/no-restricted-matchers.js +0 -11
  78. package/lib/rules/no-standalone-expect.js +7 -33
  79. package/lib/rules/no-test-prefixes.js +1 -13
  80. package/lib/rules/no-test-return-statement.js +0 -12
  81. package/lib/rules/prefer-called-with.js +0 -10
  82. package/lib/rules/prefer-comparison-matcher.js +8 -33
  83. package/lib/rules/prefer-each.js +0 -18
  84. package/lib/rules/prefer-equality-matcher.js +11 -23
  85. package/lib/rules/prefer-expect-assertions.js +4 -51
  86. package/lib/rules/prefer-expect-resolves.js +0 -12
  87. package/lib/rules/prefer-hooks-in-order.js +2 -16
  88. package/lib/rules/prefer-hooks-on-top.js +0 -9
  89. package/lib/rules/prefer-lowercase-title.js +0 -23
  90. package/lib/rules/prefer-mock-promise-shorthand.js +5 -26
  91. package/lib/rules/prefer-snapshot-hint.js +7 -31
  92. package/lib/rules/prefer-spy-on.js +0 -17
  93. package/lib/rules/prefer-strict-equal.js +0 -9
  94. package/lib/rules/prefer-to-be.js +1 -30
  95. package/lib/rules/prefer-to-contain.js +11 -21
  96. package/lib/rules/prefer-to-have-length.js +4 -16
  97. package/lib/rules/prefer-todo.js +2 -18
  98. package/lib/rules/require-hook.js +0 -22
  99. package/lib/rules/require-to-throw-message.js +0 -9
  100. package/lib/rules/require-top-level-describe.js +0 -15
  101. package/lib/rules/unbound-method.js +2 -21
  102. package/lib/rules/utils/accessors.js +6 -18
  103. package/lib/rules/utils/detectJestVersion.js +2 -7
  104. package/lib/rules/utils/followTypeAssertionChain.js +0 -4
  105. package/lib/rules/utils/index.js +0 -10
  106. package/lib/rules/utils/misc.js +2 -46
  107. package/lib/rules/utils/parseJestFnCall.js +62 -118
  108. package/lib/rules/valid-describe-callback.js +0 -17
  109. package/lib/rules/valid-expect-in-promise.js +27 -94
  110. package/lib/rules/valid-expect.js +5 -48
  111. package/lib/rules/valid-title.js +0 -33
  112. package/package.json +3 -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: {
@@ -22,32 +20,25 @@ var _default = (0, _utils.createRule)({
22
20
  schema: []
23
21
  },
24
22
  defaultOptions: [],
25
-
26
23
  create(context) {
27
24
  const jestFnCalls = [];
28
25
  let inTestCaseCall = false;
29
-
30
26
  const recommendFn = () => {
31
27
  if (jestFnCalls.length === 1 && jestFnCalls[0] === 'test') {
32
28
  return 'it';
33
29
  }
34
-
35
30
  return 'describe';
36
31
  };
37
-
38
32
  const enterForLoop = () => {
39
33
  if (jestFnCalls.length === 0 || inTestCaseCall) {
40
34
  return;
41
35
  }
42
-
43
36
  jestFnCalls.length = 0;
44
37
  };
45
-
46
38
  const exitForLoop = node => {
47
39
  if (jestFnCalls.length === 0 || inTestCaseCall) {
48
40
  return;
49
41
  }
50
-
51
42
  context.report({
52
43
  node,
53
44
  messageId: 'preferEach',
@@ -57,7 +48,6 @@ var _default = (0, _utils.createRule)({
57
48
  });
58
49
  jestFnCalls.length = 0;
59
50
  };
60
-
61
51
  return {
62
52
  ForStatement: enterForLoop,
63
53
  'ForStatement:exit': exitForLoop,
@@ -65,34 +55,26 @@ var _default = (0, _utils.createRule)({
65
55
  'ForInStatement:exit': exitForLoop,
66
56
  ForOfStatement: enterForLoop,
67
57
  'ForOfStatement:exit': exitForLoop,
68
-
69
58
  CallExpression(node) {
70
59
  const {
71
60
  type: jestFnCallType
72
61
  } = (0, _utils.parseJestFnCall)(node, context) ?? {};
73
-
74
62
  if (jestFnCallType === 'hook' || jestFnCallType === 'describe' || jestFnCallType === 'test') {
75
63
  jestFnCalls.push(jestFnCallType);
76
64
  }
77
-
78
65
  if (jestFnCallType === 'test') {
79
66
  inTestCaseCall = true;
80
67
  }
81
68
  },
82
-
83
69
  'CallExpression:exit'(node) {
84
70
  const {
85
71
  type: jestFnCallType
86
72
  } = (0, _utils.parseJestFnCall)(node, context) ?? {};
87
-
88
73
  if (jestFnCallType === 'test') {
89
74
  inTestCaseCall = false;
90
75
  }
91
76
  }
92
-
93
77
  };
94
78
  }
95
-
96
79
  });
97
-
98
80
  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,24 +23,19 @@ var _default = (0, _utils2.createRule)({
26
23
  schema: []
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) !== 'expect' || jestFnCall.args.length === 0) {
36
31
  return;
37
32
  }
38
-
39
33
  const {
40
34
  parent: expect
41
35
  } = jestFnCall.head.node;
42
-
43
36
  if ((expect === null || expect === void 0 ? void 0 : expect.type) !== _utils.AST_NODE_TYPES.CallExpression) {
44
37
  return;
45
38
  }
46
-
47
39
  const {
48
40
  arguments: [comparison],
49
41
  range: [, expectCallEnd]
@@ -52,33 +44,32 @@ var _default = (0, _utils2.createRule)({
52
44
  matcher
53
45
  } = jestFnCall;
54
46
  const matcherArg = (0, _utils2.getFirstMatcherArg)(jestFnCall);
55
-
56
47
  if ((comparison === null || comparison === void 0 ? void 0 : comparison.type) !== _utils.AST_NODE_TYPES.BinaryExpression || comparison.operator !== '===' && comparison.operator !== '!==' || !_utils2.EqualityMatcher.hasOwnProperty((0, _utils2.getAccessorValue)(matcher)) || !(0, _utils2.isBooleanLiteral)(matcherArg)) {
57
48
  return;
58
49
  }
59
-
60
50
  const matcherValue = matcherArg.value;
61
51
  const [modifier] = jestFnCall.modifiers;
62
- const hasNot = jestFnCall.modifiers.some(nod => (0, _utils2.getAccessorValue)(nod) === 'not'); // we need to negate the expectation if the current expected
63
- // value is itself negated by the "not" modifier
52
+ const hasNot = jestFnCall.modifiers.some(nod => (0, _utils2.getAccessorValue)(nod) === 'not');
64
53
 
54
+ // we need to negate the expectation if the current expected
55
+ // value is itself negated by the "not" modifier
65
56
  const addNotModifier = (comparison.operator === '!==' ? !matcherValue : matcherValue) === hasNot;
66
-
67
57
  const buildFixer = equalityMatcher => fixer => {
68
- const sourceCode = context.getSourceCode(); // preserve the existing modifier if it's not a negation
58
+ const sourceCode = context.getSourceCode();
69
59
 
60
+ // preserve the existing modifier if it's not a negation
70
61
  let modifierText = modifier && (0, _utils2.getAccessorValue)(modifier) !== 'not' ? `.${(0, _utils2.getAccessorValue)(modifier)}` : '';
71
-
72
62
  if (addNotModifier) {
73
63
  modifierText += `.${_utils2.ModifierName.not}`;
74
64
  }
75
-
76
- return [// replace the comparison argument with the left-hand side of the comparison
77
- fixer.replaceText(comparison, sourceCode.getText(comparison.left)), // replace the current matcher & modifier with the preferred matcher
78
- fixer.replaceTextRange([expectCallEnd, matcher.parent.range[1]], `${modifierText}.${equalityMatcher}`), // replace the matcher argument with the right-hand side of the comparison
65
+ return [
66
+ // replace the comparison argument with the left-hand side of the comparison
67
+ fixer.replaceText(comparison, sourceCode.getText(comparison.left)),
68
+ // replace the current matcher & modifier with the preferred matcher
69
+ fixer.replaceTextRange([expectCallEnd, matcher.parent.range[1]], `${modifierText}.${equalityMatcher}`),
70
+ // replace the matcher argument with the right-hand side of the comparison
79
71
  fixer.replaceText(matcherArg, sourceCode.getText(comparison.right))];
80
72
  };
81
-
82
73
  context.report({
83
74
  messageId: 'useEqualityMatcher',
84
75
  suggest: ['toBe', 'toEqual', 'toStrictEqual'].map(equalityMatcher => ({
@@ -91,10 +82,7 @@ var _default = (0, _utils2.createRule)({
91
82
  node: matcher
92
83
  });
93
84
  }
94
-
95
85
  };
96
86
  }
97
-
98
87
  });
99
-
100
88
  exports.default = _default;
@@ -4,40 +4,31 @@ 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 isFirstStatement = node => {
13
10
  let parent = node;
14
-
15
11
  while (parent) {
16
12
  var _parent$parent, _parent$parent2;
17
-
18
13
  if (((_parent$parent = parent.parent) === null || _parent$parent === void 0 ? void 0 : _parent$parent.type) === _utils.AST_NODE_TYPES.BlockStatement) {
19
14
  return parent.parent.body[0] === parent;
20
- } // if we've hit an arrow function, then it must have a single expression
21
- // as its body, as otherwise we would have hit the block statement already
22
-
15
+ }
23
16
 
17
+ // if we've hit an arrow function, then it must have a single expression
18
+ // as its body, as otherwise we would have hit the block statement already
24
19
  if (((_parent$parent2 = parent.parent) === null || _parent$parent2 === void 0 ? void 0 : _parent$parent2.type) === _utils.AST_NODE_TYPES.ArrowFunctionExpression) {
25
20
  return true;
26
21
  }
27
-
28
22
  parent = parent.parent;
29
23
  }
30
- /* istanbul ignore next */
31
-
32
24
 
25
+ /* istanbul ignore next */
33
26
  throw new Error(`Could not find BlockStatement - please file a github issue at https://github.com/jest-community/eslint-plugin-jest`);
34
27
  };
35
-
36
28
  const suggestRemovingExtraArguments = (args, extraArgsStartAt) => ({
37
29
  messageId: 'suggestRemovingExtraArguments',
38
30
  fix: fixer => fixer.removeRange([args[extraArgsStartAt].range[0] - Math.sign(extraArgsStartAt), args[args.length - 1].range[1]])
39
31
  });
40
-
41
32
  var _default = (0, _utils2.createRule)({
42
33
  name: __filename,
43
34
  meta: {
@@ -78,7 +69,6 @@ var _default = (0, _utils2.createRule)({
78
69
  onlyFunctionsWithExpectInLoop: false,
79
70
  onlyFunctionsWithExpectInCallback: false
80
71
  }],
81
-
82
72
  create(context, [options]) {
83
73
  let expressionDepth = 0;
84
74
  let hasExpectInCallback = false;
@@ -86,33 +76,27 @@ var _default = (0, _utils2.createRule)({
86
76
  let hasExpectAssertionsAsFirstStatement = false;
87
77
  let inTestCaseCall = false;
88
78
  let inForLoop = false;
89
-
90
79
  const shouldCheckFunction = testFunction => {
91
80
  if (!options.onlyFunctionsWithAsyncKeyword && !options.onlyFunctionsWithExpectInLoop && !options.onlyFunctionsWithExpectInCallback) {
92
81
  return true;
93
82
  }
94
-
95
83
  if (options.onlyFunctionsWithAsyncKeyword) {
96
84
  if (testFunction.async) {
97
85
  return true;
98
86
  }
99
87
  }
100
-
101
88
  if (options.onlyFunctionsWithExpectInLoop) {
102
89
  if (hasExpectInLoop) {
103
90
  return true;
104
91
  }
105
92
  }
106
-
107
93
  if (options.onlyFunctionsWithExpectInCallback) {
108
94
  if (hasExpectInCallback) {
109
95
  return true;
110
96
  }
111
97
  }
112
-
113
98
  return false;
114
99
  };
115
-
116
100
  const checkExpectHasAssertions = expectFnCall => {
117
101
  if ((0, _utils2.getAccessorValue)(expectFnCall.members[0]) === 'hasAssertions') {
118
102
  if (expectFnCall.args.length) {
@@ -122,21 +106,17 @@ var _default = (0, _utils2.createRule)({
122
106
  suggest: [suggestRemovingExtraArguments(expectFnCall.args, 0)]
123
107
  });
124
108
  }
125
-
126
109
  return;
127
110
  }
128
-
129
111
  if (expectFnCall.args.length !== 1) {
130
112
  let {
131
113
  loc
132
114
  } = expectFnCall.matcher;
133
115
  const suggest = [];
134
-
135
116
  if (expectFnCall.args.length) {
136
117
  loc = expectFnCall.args[1].loc;
137
118
  suggest.push(suggestRemovingExtraArguments(expectFnCall.args, 1));
138
119
  }
139
-
140
120
  context.report({
141
121
  messageId: 'assertionsRequiresOneArgument',
142
122
  suggest,
@@ -144,27 +124,19 @@ var _default = (0, _utils2.createRule)({
144
124
  });
145
125
  return;
146
126
  }
147
-
148
127
  const [arg] = expectFnCall.args;
149
-
150
128
  if (arg.type === _utils.AST_NODE_TYPES.Literal && typeof arg.value === 'number' && Number.isInteger(arg.value)) {
151
129
  return;
152
130
  }
153
-
154
131
  context.report({
155
132
  messageId: 'assertionsRequiresNumberArgument',
156
133
  node: arg
157
134
  });
158
135
  };
159
-
160
136
  const enterExpression = () => inTestCaseCall && expressionDepth++;
161
-
162
137
  const exitExpression = () => inTestCaseCall && expressionDepth--;
163
-
164
138
  const enterForLoop = () => inForLoop = true;
165
-
166
139
  const exitForLoop = () => inForLoop = false;
167
-
168
140
  return {
169
141
  FunctionExpression: enterExpression,
170
142
  'FunctionExpression:exit': exitExpression,
@@ -176,64 +148,48 @@ var _default = (0, _utils2.createRule)({
176
148
  'ForInStatement:exit': exitForLoop,
177
149
  ForOfStatement: enterForLoop,
178
150
  'ForOfStatement:exit': exitForLoop,
179
-
180
151
  CallExpression(node) {
181
152
  const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
182
-
183
153
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'test') {
184
154
  inTestCaseCall = true;
185
155
  return;
186
156
  }
187
-
188
157
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'expect' && inTestCaseCall) {
189
158
  var _jestFnCall$head$node;
190
-
191
159
  if (expressionDepth === 1 && isFirstStatement(node) && ((_jestFnCall$head$node = jestFnCall.head.node.parent) === null || _jestFnCall$head$node === void 0 ? void 0 : _jestFnCall$head$node.type) === _utils.AST_NODE_TYPES.MemberExpression && jestFnCall.members.length === 1 && ['assertions', 'hasAssertions'].includes((0, _utils2.getAccessorValue)(jestFnCall.members[0]))) {
192
160
  checkExpectHasAssertions(jestFnCall);
193
161
  hasExpectAssertionsAsFirstStatement = true;
194
162
  }
195
-
196
163
  if (inForLoop) {
197
164
  hasExpectInLoop = true;
198
165
  }
199
-
200
166
  if (expressionDepth > 1) {
201
167
  hasExpectInCallback = true;
202
168
  }
203
169
  }
204
170
  },
205
-
206
171
  'CallExpression:exit'(node) {
207
172
  if (!(0, _utils2.isTypeOfJestFnCall)(node, context, ['test'])) {
208
173
  return;
209
174
  }
210
-
211
175
  inTestCaseCall = false;
212
-
213
176
  if (node.arguments.length < 2) {
214
177
  return;
215
178
  }
216
-
217
179
  const [, testFn] = node.arguments;
218
-
219
180
  if (!(0, _utils2.isFunction)(testFn) || !shouldCheckFunction(testFn)) {
220
181
  return;
221
182
  }
222
-
223
183
  hasExpectInLoop = false;
224
184
  hasExpectInCallback = false;
225
-
226
185
  if (hasExpectAssertionsAsFirstStatement) {
227
186
  hasExpectAssertionsAsFirstStatement = false;
228
187
  return;
229
188
  }
230
-
231
189
  const suggestions = [];
232
-
233
190
  if (testFn.body.type === _utils.AST_NODE_TYPES.BlockStatement) {
234
191
  suggestions.push(['suggestAddingHasAssertions', 'expect.hasAssertions();'], ['suggestAddingAssertions', 'expect.assertions();']);
235
192
  }
236
-
237
193
  context.report({
238
194
  messageId: 'haveExpectAssertions',
239
195
  node,
@@ -243,10 +199,7 @@ var _default = (0, _utils2.createRule)({
243
199
  }))
244
200
  });
245
201
  }
246
-
247
202
  };
248
203
  }
249
-
250
204
  });
251
-
252
205
  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: {
@@ -28,35 +25,26 @@ var _default = (0, _utils2.createRule)({
28
25
  create: context => ({
29
26
  CallExpression(node) {
30
27
  const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
31
-
32
28
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'expect') {
33
29
  return;
34
30
  }
35
-
36
31
  const {
37
32
  parent
38
33
  } = jestFnCall.head.node;
39
-
40
34
  if ((parent === null || parent === void 0 ? void 0 : parent.type) !== _utils.AST_NODE_TYPES.CallExpression) {
41
35
  return;
42
36
  }
43
-
44
37
  const [awaitNode] = parent.arguments;
45
-
46
38
  if ((awaitNode === null || awaitNode === void 0 ? void 0 : awaitNode.type) === _utils.AST_NODE_TYPES.AwaitExpression) {
47
39
  context.report({
48
40
  node: awaitNode,
49
41
  messageId: 'expectResolves',
50
-
51
42
  fix(fixer) {
52
43
  return [fixer.insertTextBefore(parent, 'await '), fixer.removeRange([awaitNode.range[0], awaitNode.argument.range[0]]), fixer.insertTextAfter(parent, '.resolves')];
53
44
  }
54
-
55
45
  });
56
46
  }
57
47
  }
58
-
59
48
  })
60
49
  });
61
-
62
50
  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("./utils");
9
-
10
8
  const HooksOrder = ['beforeAll', 'beforeEach', 'afterEach', 'afterAll'];
11
-
12
9
  var _default = (0, _utils.createRule)({
13
10
  name: __filename,
14
11
  meta: {
@@ -24,7 +21,6 @@ var _default = (0, _utils.createRule)({
24
21
  type: 'suggestion'
25
22
  },
26
23
  defaultOptions: [],
27
-
28
24
  create(context) {
29
25
  let previousHookIndex = -1;
30
26
  let inHook = false;
@@ -34,19 +30,15 @@ var _default = (0, _utils.createRule)({
34
30
  // Ignore everything that is passed into a hook
35
31
  return;
36
32
  }
37
-
38
33
  const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
39
-
40
34
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'hook') {
41
35
  // Reset the previousHookIndex when encountering something different from a hook
42
36
  previousHookIndex = -1;
43
37
  return;
44
38
  }
45
-
46
39
  inHook = true;
47
40
  const currentHook = jestFnCall.name;
48
41
  const currentHookIndex = HooksOrder.indexOf(currentHook);
49
-
50
42
  if (currentHookIndex < previousHookIndex) {
51
43
  context.report({
52
44
  messageId: 'reorderHooks',
@@ -58,27 +50,21 @@ var _default = (0, _utils.createRule)({
58
50
  });
59
51
  return;
60
52
  }
61
-
62
53
  previousHookIndex = currentHookIndex;
63
54
  },
64
-
65
55
  'CallExpression:exit'(node) {
66
56
  if ((0, _utils.isTypeOfJestFnCall)(node, context, ['hook'])) {
67
57
  inHook = false;
68
58
  return;
69
59
  }
70
-
71
60
  if (inHook) {
72
61
  return;
73
- } // Reset the previousHookIndex when encountering something different from a hook
74
-
62
+ }
75
63
 
64
+ // Reset the previousHookIndex when encountering something different from a hook
76
65
  previousHookIndex = -1;
77
66
  }
78
-
79
67
  };
80
68
  }
81
-
82
69
  });
83
-
84
70
  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,7 +20,6 @@ var _default = (0, _utils.createRule)({
22
20
  type: 'suggestion'
23
21
  },
24
22
  defaultOptions: [],
25
-
26
23
  create(context) {
27
24
  const hooksContext = [false];
28
25
  return {
@@ -30,24 +27,18 @@ var _default = (0, _utils.createRule)({
30
27
  if ((0, _utils.isTypeOfJestFnCall)(node, context, ['test'])) {
31
28
  hooksContext[hooksContext.length - 1] = true;
32
29
  }
33
-
34
30
  if (hooksContext[hooksContext.length - 1] && (0, _utils.isTypeOfJestFnCall)(node, context, ['hook'])) {
35
31
  context.report({
36
32
  messageId: 'noHookOnTop',
37
33
  node
38
34
  });
39
35
  }
40
-
41
36
  hooksContext.push(false);
42
37
  },
43
-
44
38
  'CallExpression:exit'() {
45
39
  hooksContext.pop();
46
40
  }
47
-
48
41
  };
49
42
  }
50
-
51
43
  });
52
-
53
44
  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("./utils");
9
-
10
8
  const hasStringAsFirstArgument = node => node.arguments[0] && (0, _utils.isStringNode)(node.arguments[0]);
11
-
12
9
  const populateIgnores = ignore => {
13
10
  const ignores = [];
14
-
15
11
  if (ignore.includes(_utils.DescribeAlias.describe)) {
16
12
  ignores.push(...Object.keys(_utils.DescribeAlias));
17
13
  }
18
-
19
14
  if (ignore.includes(_utils.TestCaseName.test)) {
20
15
  ignores.push(...Object.keys(_utils.TestCaseName).filter(k => k.endsWith(_utils.TestCaseName.test)));
21
16
  }
22
-
23
17
  if (ignore.includes(_utils.TestCaseName.it)) {
24
18
  ignores.push(...Object.keys(_utils.TestCaseName).filter(k => k.endsWith(_utils.TestCaseName.it)));
25
19
  }
26
-
27
20
  return ignores;
28
21
  };
29
-
30
22
  var _default = (0, _utils.createRule)({
31
23
  name: __filename,
32
24
  meta: {
@@ -70,7 +62,6 @@ var _default = (0, _utils.createRule)({
70
62
  allowedPrefixes: [],
71
63
  ignoreTopLevelDescribe: false
72
64
  }],
73
-
74
65
  create(context, [{
75
66
  ignore = [],
76
67
  allowedPrefixes = [],
@@ -81,60 +72,46 @@ var _default = (0, _utils.createRule)({
81
72
  return {
82
73
  CallExpression(node) {
83
74
  const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
84
-
85
75
  if (!jestFnCall || !hasStringAsFirstArgument(node)) {
86
76
  return;
87
77
  }
88
-
89
78
  if (jestFnCall.type === 'describe') {
90
79
  numberOfDescribeBlocks++;
91
-
92
80
  if (ignoreTopLevelDescribe && numberOfDescribeBlocks === 1) {
93
81
  return;
94
82
  }
95
83
  } else if (jestFnCall.type !== 'test') {
96
84
  return;
97
85
  }
98
-
99
86
  const [firstArg] = node.arguments;
100
87
  const description = (0, _utils.getStringValue)(firstArg);
101
-
102
88
  if (allowedPrefixes.some(name => description.startsWith(name))) {
103
89
  return;
104
90
  }
105
-
106
91
  const firstCharacter = description.charAt(0);
107
-
108
92
  if (!firstCharacter || firstCharacter === firstCharacter.toLowerCase() || ignores.includes(jestFnCall.name)) {
109
93
  return;
110
94
  }
111
-
112
95
  context.report({
113
96
  messageId: 'unexpectedLowercase',
114
97
  node: node.arguments[0],
115
98
  data: {
116
99
  method: jestFnCall.name
117
100
  },
118
-
119
101
  fix(fixer) {
120
102
  const description = (0, _utils.getStringValue)(firstArg);
121
103
  const rangeIgnoringQuotes = [firstArg.range[0] + 1, firstArg.range[1] - 1];
122
104
  const newDescription = description.substring(0, 1).toLowerCase() + description.substring(1);
123
105
  return [fixer.replaceTextRange(rangeIgnoringQuotes, newDescription)];
124
106
  }
125
-
126
107
  });
127
108
  },
128
-
129
109
  'CallExpression:exit'(node) {
130
110
  if ((0, _utils.isTypeOfJestFnCall)(node, context, ['describe'])) {
131
111
  numberOfDescribeBlocks--;
132
112
  }
133
113
  }
134
-
135
114
  };
136
115
  }
137
-
138
116
  });
139
-
140
117
  exports.default = _default;