eslint-plugin-jest 27.2.1 → 27.2.2

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 (77) hide show
  1. package/README.md +1 -1
  2. package/docs/rules/no-alias-methods.md +1 -1
  3. package/docs/rules/no-hooks.md +1 -1
  4. package/docs/rules/no-large-snapshots.md +4 -0
  5. package/docs/rules/require-hook.md +2 -6
  6. package/docs/rules/valid-expect.md +2 -2
  7. package/lib/index.js +2 -0
  8. package/lib/processors/__tests__/snapshot-processor.test.js +36 -0
  9. package/lib/rules/__tests__/consistent-test-it.test.js +921 -0
  10. package/lib/rules/__tests__/expect-expect.test.js +347 -0
  11. package/lib/rules/__tests__/fixtures/class.ts +13 -0
  12. package/lib/rules/__tests__/fixtures/file.ts +0 -0
  13. package/lib/rules/__tests__/fixtures/foo.ts +1 -0
  14. package/lib/rules/__tests__/fixtures/indent/indent-invalid-fixture-1.js +530 -0
  15. package/lib/rules/__tests__/fixtures/indent/indent-valid-fixture-1.js +530 -0
  16. package/lib/rules/__tests__/fixtures/react.tsx +0 -0
  17. package/lib/rules/__tests__/fixtures/tsconfig-withmeta.json +6 -0
  18. package/lib/rules/__tests__/fixtures/tsconfig.json +16 -0
  19. package/lib/rules/__tests__/fixtures/unstrict/file.ts +0 -0
  20. package/lib/rules/__tests__/fixtures/unstrict/react.tsx +0 -0
  21. package/lib/rules/__tests__/fixtures/unstrict/tsconfig.json +15 -0
  22. package/lib/rules/__tests__/max-expects.test.js +330 -0
  23. package/lib/rules/__tests__/max-nested-describe.test.js +247 -0
  24. package/lib/rules/__tests__/no-alias-methods.test.js +190 -0
  25. package/lib/rules/__tests__/no-commented-out-tests.test.js +213 -0
  26. package/lib/rules/__tests__/no-conditional-expect.test.js +696 -0
  27. package/lib/rules/__tests__/no-conditional-in-test.test.js +777 -0
  28. package/lib/rules/__tests__/no-deprecated-functions.test.js +119 -0
  29. package/lib/rules/__tests__/no-disabled-tests.test.js +241 -0
  30. package/lib/rules/__tests__/no-done-callback.test.js +424 -0
  31. package/lib/rules/__tests__/no-duplicate-hooks.test.js +469 -0
  32. package/lib/rules/__tests__/no-export.test.js +107 -0
  33. package/lib/rules/__tests__/no-focused-tests.test.js +373 -0
  34. package/lib/rules/__tests__/no-hooks.test.js +90 -0
  35. package/lib/rules/__tests__/no-identical-title.test.js +270 -0
  36. package/lib/rules/__tests__/no-if.test.js +787 -0
  37. package/lib/rules/__tests__/no-interpolation-in-snapshots.test.js +58 -0
  38. package/lib/rules/__tests__/no-jasmine-globals.test.js +206 -0
  39. package/lib/rules/__tests__/no-large-snapshots.test.js +237 -0
  40. package/lib/rules/__tests__/no-mocks-import.test.js +73 -0
  41. package/lib/rules/__tests__/no-restricted-jest-methods.test.js +103 -0
  42. package/lib/rules/__tests__/no-restricted-matchers.test.js +244 -0
  43. package/lib/rules/__tests__/no-standalone-expect.test.js +230 -0
  44. package/lib/rules/__tests__/no-test-prefixes.test.js +206 -0
  45. package/lib/rules/__tests__/no-test-return-statement.test.js +122 -0
  46. package/lib/rules/__tests__/no-untyped-mock-factory.test.js +149 -0
  47. package/lib/rules/__tests__/prefer-called-with.test.js +40 -0
  48. package/lib/rules/__tests__/prefer-comparison-matcher.test.js +200 -0
  49. package/lib/rules/__tests__/prefer-each.test.js +295 -0
  50. package/lib/rules/__tests__/prefer-equality-matcher.test.js +184 -0
  51. package/lib/rules/__tests__/prefer-expect-assertions.test.js +1437 -0
  52. package/lib/rules/__tests__/prefer-expect-resolves.test.js +96 -0
  53. package/lib/rules/__tests__/prefer-hooks-in-order.test.js +678 -0
  54. package/lib/rules/__tests__/prefer-hooks-on-top.test.js +218 -0
  55. package/lib/rules/__tests__/prefer-lowercase-title.test.js +619 -0
  56. package/lib/rules/__tests__/prefer-mock-promise-shorthand.test.js +360 -0
  57. package/lib/rules/__tests__/prefer-snapshot-hint.test.js +784 -0
  58. package/lib/rules/__tests__/prefer-spy-on.test.js +100 -0
  59. package/lib/rules/__tests__/prefer-strict-equal.test.js +46 -0
  60. package/lib/rules/__tests__/prefer-to-be.test.js +438 -0
  61. package/lib/rules/__tests__/prefer-to-contain.test.js +301 -0
  62. package/lib/rules/__tests__/prefer-to-have-length.test.js +99 -0
  63. package/lib/rules/__tests__/prefer-todo.test.js +78 -0
  64. package/lib/rules/__tests__/require-hook.test.js +403 -0
  65. package/lib/rules/__tests__/require-to-throw-message.test.js +108 -0
  66. package/lib/rules/__tests__/require-top-level-describe.test.js +236 -0
  67. package/lib/rules/__tests__/test-utils.js +11 -0
  68. package/lib/rules/__tests__/unbound-method.test.js +518 -0
  69. package/lib/rules/__tests__/valid-describe-callback.test.js +305 -0
  70. package/lib/rules/__tests__/valid-expect-in-promise.test.js +1583 -0
  71. package/lib/rules/__tests__/valid-expect.test.js +894 -0
  72. package/lib/rules/__tests__/valid-title.test.js +1147 -0
  73. package/lib/rules/utils/__tests__/detectJestVersion.test.js +221 -0
  74. package/lib/rules/utils/__tests__/parseJestFnCall.test.js +809 -0
  75. package/lib/rules/utils/accessors.js +4 -0
  76. package/lib/rules/utils/misc.js +36 -20
  77. package/package.json +12 -8
@@ -0,0 +1,809 @@
1
+ "use strict";
2
+
3
+ var _utils = require("@typescript-eslint/utils");
4
+ var _dedent = _interopRequireDefault(require("dedent"));
5
+ var _testUtils = require("../../__tests__/test-utils");
6
+ var _utils2 = require("../../utils");
7
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ const findESLintVersion = () => {
9
+ const eslintPath = require.resolve('eslint/package.json');
10
+ const eslintPackageJson =
11
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
12
+ require(eslintPath);
13
+ if (!eslintPackageJson.version) {
14
+ throw new Error('eslint package.json does not have a version!');
15
+ }
16
+ const [majorVersion] = eslintPackageJson.version.split('.');
17
+ return parseInt(majorVersion, 10);
18
+ };
19
+ const eslintVersion = findESLintVersion();
20
+ const ruleTester = new _utils.TSESLint.RuleTester({
21
+ parser: _testUtils.espreeParser,
22
+ parserOptions: {
23
+ ecmaVersion: 2015
24
+ }
25
+ });
26
+ const isNode = obj => {
27
+ if (typeof obj === 'object' && obj !== null) {
28
+ return ['type', 'loc', 'range', 'parent'].every(p => p in obj);
29
+ }
30
+ return false;
31
+ };
32
+ const rule = (0, _utils2.createRule)({
33
+ name: __filename,
34
+ meta: {
35
+ docs: {
36
+ category: 'Possible Errors',
37
+ description: 'Fake rule for testing parseJestFnCall',
38
+ recommended: false
39
+ },
40
+ messages: {
41
+ details: '{{ data }}'
42
+ },
43
+ schema: [],
44
+ type: 'problem'
45
+ },
46
+ defaultOptions: [],
47
+ create: context => ({
48
+ CallExpression(node) {
49
+ const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
50
+ if (jestFnCall) {
51
+ const sorted = {
52
+ // ...jestFnCall,
53
+ name: jestFnCall.name,
54
+ type: jestFnCall.type,
55
+ head: jestFnCall.head,
56
+ members: jestFnCall.members
57
+ };
58
+ context.report({
59
+ messageId: 'details',
60
+ node,
61
+ data: {
62
+ data: JSON.stringify(sorted, (_key, value) => {
63
+ if (isNode(value)) {
64
+ if ((0, _utils2.isSupportedAccessor)(value)) {
65
+ return (0, _utils2.getAccessorValue)(value);
66
+ }
67
+ return undefined;
68
+ }
69
+ return value;
70
+ })
71
+ }
72
+ });
73
+ }
74
+ }
75
+ })
76
+ });
77
+ // const sortParsedJestFnCallResults = ()
78
+
79
+ const expectedParsedJestFnCallResultData = result => ({
80
+ data: JSON.stringify({
81
+ name: result.name,
82
+ type: result.type,
83
+ head: result.head,
84
+ members: result.members
85
+ })
86
+ });
87
+ ruleTester.run('nonexistent methods', rule, {
88
+ valid: ['describe.something()', 'describe.me()', 'test.me()', 'it.fails()', 'context()', 'context.each``()', 'context.each()', 'describe.context()', 'describe.concurrent()()', 'describe.concurrent``()', 'describe.every``()', '/regex/.test()', '"something".describe()', '[].describe()', 'new describe().only()', '``.test()', 'test.only``()', 'test``.only()'],
89
+ invalid: []
90
+ });
91
+ ruleTester.run('expect', rule, {
92
+ valid: [{
93
+ code: (0, _dedent.default)`
94
+ import { expect } from './test-utils';
95
+
96
+ expect(x).toBe(y);
97
+ `,
98
+ parserOptions: {
99
+ sourceType: 'module'
100
+ }
101
+ }, {
102
+ code: (0, _dedent.default)`
103
+ import { expect } from '@jest/globals';
104
+
105
+ expect(x).not.resolves.toBe(x);
106
+ `,
107
+ parserOptions: {
108
+ sourceType: 'module'
109
+ }
110
+ },
111
+ // {
112
+ // code: dedent`
113
+ // import { expect } from '@jest/globals';
114
+ //
115
+ // expect(x).not().toBe(x);
116
+ // `,
117
+ // parserOptions: { sourceType: 'module' },
118
+ // },
119
+ {
120
+ code: (0, _dedent.default)`
121
+ import { expect } from '@jest/globals';
122
+
123
+ expect(x).is.toBe(x);
124
+ `,
125
+ parserOptions: {
126
+ sourceType: 'module'
127
+ }
128
+ }, {
129
+ code: (0, _dedent.default)`
130
+ import { expect } from '@jest/globals';
131
+
132
+ expect;
133
+ expect(x);
134
+ expect(x).toBe;
135
+ expect(x).not.toBe;
136
+ //expect(x).toBe(x).not();
137
+ `,
138
+ parserOptions: {
139
+ sourceType: 'module'
140
+ }
141
+ }],
142
+ invalid: [{
143
+ code: 'expect(x).toBe(y);',
144
+ parserOptions: {
145
+ sourceType: 'script'
146
+ },
147
+ errors: [{
148
+ messageId: 'details',
149
+ data: expectedParsedJestFnCallResultData({
150
+ name: 'expect',
151
+ type: 'expect',
152
+ head: {
153
+ original: null,
154
+ local: 'expect',
155
+ type: 'global',
156
+ node: 'expect'
157
+ },
158
+ members: ['toBe']
159
+ }),
160
+ column: 1,
161
+ line: 1
162
+ }]
163
+ }, {
164
+ code: (0, _dedent.default)`
165
+ import { expect } from '@jest/globals';
166
+
167
+ expect.assertions();
168
+ `,
169
+ parserOptions: {
170
+ sourceType: 'module'
171
+ },
172
+ errors: [{
173
+ messageId: 'details',
174
+ data: expectedParsedJestFnCallResultData({
175
+ name: 'expect',
176
+ type: 'expect',
177
+ head: {
178
+ original: 'expect',
179
+ local: 'expect',
180
+ type: 'import',
181
+ node: 'expect'
182
+ },
183
+ members: ['assertions']
184
+ }),
185
+ column: 1,
186
+ line: 3
187
+ }]
188
+ }, {
189
+ code: (0, _dedent.default)`
190
+ import { expect } from '@jest/globals';
191
+
192
+ expect(x).toBe(y);
193
+ `,
194
+ parserOptions: {
195
+ sourceType: 'module'
196
+ },
197
+ errors: [{
198
+ messageId: 'details',
199
+ data: expectedParsedJestFnCallResultData({
200
+ name: 'expect',
201
+ type: 'expect',
202
+ head: {
203
+ original: 'expect',
204
+ local: 'expect',
205
+ type: 'import',
206
+ node: 'expect'
207
+ },
208
+ members: ['toBe']
209
+ }),
210
+ column: 1,
211
+ line: 3
212
+ }]
213
+ }, {
214
+ code: (0, _dedent.default)`
215
+ import { expect } from '@jest/globals';
216
+
217
+ expect(x).not(y);
218
+ `,
219
+ parserOptions: {
220
+ sourceType: 'module'
221
+ },
222
+ errors: [{
223
+ messageId: 'details',
224
+ data: expectedParsedJestFnCallResultData({
225
+ name: 'expect',
226
+ type: 'expect',
227
+ head: {
228
+ original: 'expect',
229
+ local: 'expect',
230
+ type: 'import',
231
+ node: 'expect'
232
+ },
233
+ members: ['not']
234
+ }),
235
+ column: 1,
236
+ line: 3
237
+ }]
238
+ }, {
239
+ code: (0, _dedent.default)`
240
+ import { expect } from '@jest/globals';
241
+
242
+ expect(x).not.toBe(y);
243
+ `,
244
+ parserOptions: {
245
+ sourceType: 'module'
246
+ },
247
+ errors: [{
248
+ messageId: 'details',
249
+ data: expectedParsedJestFnCallResultData({
250
+ name: 'expect',
251
+ type: 'expect',
252
+ head: {
253
+ original: 'expect',
254
+ local: 'expect',
255
+ type: 'import',
256
+ node: 'expect'
257
+ },
258
+ members: ['not', 'toBe']
259
+ }),
260
+ column: 1,
261
+ line: 3
262
+ }]
263
+ }, {
264
+ code: (0, _dedent.default)`
265
+ import { expect } from '@jest/globals';
266
+
267
+ expect.assertions();
268
+ expect.hasAssertions();
269
+ expect.anything();
270
+ expect.not.arrayContaining();
271
+ `,
272
+ parserOptions: {
273
+ sourceType: 'module'
274
+ },
275
+ errors: [{
276
+ messageId: 'details',
277
+ data: expectedParsedJestFnCallResultData({
278
+ name: 'expect',
279
+ type: 'expect',
280
+ head: {
281
+ original: 'expect',
282
+ local: 'expect',
283
+ type: 'import',
284
+ node: 'expect'
285
+ },
286
+ members: ['assertions']
287
+ }),
288
+ column: 1,
289
+ line: 3
290
+ }, {
291
+ messageId: 'details',
292
+ data: expectedParsedJestFnCallResultData({
293
+ name: 'expect',
294
+ type: 'expect',
295
+ head: {
296
+ original: 'expect',
297
+ local: 'expect',
298
+ type: 'import',
299
+ node: 'expect'
300
+ },
301
+ members: ['hasAssertions']
302
+ }),
303
+ column: 1,
304
+ line: 4
305
+ }, {
306
+ messageId: 'details',
307
+ data: expectedParsedJestFnCallResultData({
308
+ name: 'expect',
309
+ type: 'expect',
310
+ head: {
311
+ original: 'expect',
312
+ local: 'expect',
313
+ type: 'import',
314
+ node: 'expect'
315
+ },
316
+ members: ['anything']
317
+ }),
318
+ column: 1,
319
+ line: 5
320
+ }, {
321
+ messageId: 'details',
322
+ data: expectedParsedJestFnCallResultData({
323
+ name: 'expect',
324
+ type: 'expect',
325
+ head: {
326
+ original: 'expect',
327
+ local: 'expect',
328
+ type: 'import',
329
+ node: 'expect'
330
+ },
331
+ members: ['not', 'arrayContaining']
332
+ }),
333
+ column: 1,
334
+ line: 6
335
+ }]
336
+ }]
337
+ });
338
+ ruleTester.run('esm', rule, {
339
+ valid: [{
340
+ code: (0, _dedent.default)`
341
+ import { it } from './test-utils';
342
+
343
+ it('is not a jest function', () => {});
344
+ `,
345
+ parserOptions: {
346
+ sourceType: 'module'
347
+ }
348
+ }, {
349
+ code: (0, _dedent.default)`
350
+ import { defineFeature, loadFeature } from "jest-cucumber";
351
+
352
+ const feature = loadFeature("some/feature");
353
+
354
+ defineFeature(feature, (test) => {
355
+ test("A scenario", ({ given, when, then }) => {});
356
+ });
357
+ `,
358
+ parserOptions: {
359
+ sourceType: 'module'
360
+ }
361
+ }, {
362
+ code: (0, _dedent.default)`
363
+ import { describe } from './test-utils';
364
+
365
+ describe('a function that is not from jest', () => {});
366
+ `,
367
+ parserOptions: {
368
+ sourceType: 'module'
369
+ }
370
+ }, {
371
+ code: (0, _dedent.default)`
372
+ import { fn as it } from './test-utils';
373
+
374
+ it('is not a jest function', () => {});
375
+ `,
376
+ parserOptions: {
377
+ sourceType: 'module'
378
+ }
379
+ }, {
380
+ code: (0, _dedent.default)`
381
+ import * as jest from '@jest/globals';
382
+ const { it } = jest;
383
+
384
+ it('is not supported', () => {});
385
+ `,
386
+ parserOptions: {
387
+ sourceType: 'module'
388
+ }
389
+ }, {
390
+ code: (0, _dedent.default)`
391
+ import ByDefault from './myfile';
392
+
393
+ ByDefault.sayHello();
394
+ `,
395
+ parserOptions: {
396
+ sourceType: 'module'
397
+ }
398
+ }, {
399
+ code: (0, _dedent.default)`
400
+ async function doSomething() {
401
+ const build = await rollup(config);
402
+ build.generate();
403
+ }
404
+ `,
405
+ parserOptions: {
406
+ sourceType: 'module',
407
+ ecmaVersion: 2017
408
+ }
409
+ }],
410
+ invalid: []
411
+ });
412
+ if (eslintVersion >= 8) {
413
+ ruleTester.run('esm (dynamic)', rule, {
414
+ valid: [{
415
+ code: (0, _dedent.default)`
416
+ const { it } = await import('./test-utils');
417
+
418
+ it('is not a jest function', () => {});
419
+ `,
420
+ parserOptions: {
421
+ sourceType: 'module',
422
+ ecmaVersion: 2022
423
+ }
424
+ }, {
425
+ code: (0, _dedent.default)`
426
+ const { it } = await import(\`./test-utils\`);
427
+
428
+ it('is not a jest function', () => {});
429
+ `,
430
+ parserOptions: {
431
+ sourceType: 'module',
432
+ ecmaVersion: 2022
433
+ }
434
+ }],
435
+ invalid: [{
436
+ code: (0, _dedent.default)`
437
+ const { it } = await import("@jest/globals");
438
+
439
+ it('is a jest function', () => {});
440
+ `,
441
+ parserOptions: {
442
+ sourceType: 'module',
443
+ ecmaVersion: 2022
444
+ },
445
+ errors: [{
446
+ messageId: 'details',
447
+ data: expectedParsedJestFnCallResultData({
448
+ name: 'it',
449
+ type: 'test',
450
+ head: {
451
+ original: 'it',
452
+ local: 'it',
453
+ type: 'import',
454
+ node: 'it'
455
+ },
456
+ members: []
457
+ }),
458
+ column: 1,
459
+ line: 3
460
+ }]
461
+ }, {
462
+ code: (0, _dedent.default)`
463
+ const { it } = await import(\`@jest/globals\`);
464
+
465
+ it('is a jest function', () => {});
466
+ `,
467
+ parserOptions: {
468
+ sourceType: 'module',
469
+ ecmaVersion: 2022
470
+ },
471
+ errors: [{
472
+ messageId: 'details',
473
+ data: expectedParsedJestFnCallResultData({
474
+ name: 'it',
475
+ type: 'test',
476
+ head: {
477
+ original: 'it',
478
+ local: 'it',
479
+ type: 'import',
480
+ node: 'it'
481
+ },
482
+ members: []
483
+ }),
484
+ column: 1,
485
+ line: 3
486
+ }]
487
+ }]
488
+ });
489
+ }
490
+ ruleTester.run('cjs', rule, {
491
+ valid: [{
492
+ code: (0, _dedent.default)`
493
+ const { it } = require('./test-utils');
494
+
495
+ it('is not a jest function', () => {});
496
+ `,
497
+ parserOptions: {
498
+ sourceType: 'script'
499
+ }
500
+ }, {
501
+ code: (0, _dedent.default)`
502
+ const { it } = require(\`./test-utils\`);
503
+
504
+ it('is not a jest function', () => {});
505
+ `,
506
+ parserOptions: {
507
+ sourceType: 'script'
508
+ }
509
+ }, {
510
+ code: (0, _dedent.default)`
511
+ const { describe } = require('./test-utils');
512
+
513
+ describe('a function that is not from jest', () => {});
514
+ `,
515
+ parserOptions: {
516
+ sourceType: 'script'
517
+ }
518
+ }, {
519
+ code: (0, _dedent.default)`
520
+ const { fn: it } = require('./test-utils');
521
+
522
+ it('is not a jest function', () => {});
523
+ `,
524
+ parserOptions: {
525
+ sourceType: 'script'
526
+ }
527
+ }, {
528
+ code: (0, _dedent.default)`
529
+ const { fn: it } = require('@jest/globals');
530
+
531
+ it('is not considered a test function', () => {});
532
+ `,
533
+ parserOptions: {
534
+ sourceType: 'script'
535
+ }
536
+ }, {
537
+ code: (0, _dedent.default)`
538
+ const { it } = aliasedRequire('@jest/globals');
539
+
540
+ it('is not considered a jest function', () => {});
541
+ `,
542
+ parserOptions: {
543
+ sourceType: 'script'
544
+ }
545
+ }, {
546
+ code: (0, _dedent.default)`
547
+ const { it } = require();
548
+
549
+ it('is not a jest function', () => {});
550
+ `,
551
+ parserOptions: {
552
+ sourceType: 'script'
553
+ }
554
+ }, {
555
+ code: (0, _dedent.default)`
556
+ const { it } = require(pathToMyPackage);
557
+
558
+ it('is not a jest function', () => {});
559
+ `,
560
+ parserOptions: {
561
+ sourceType: 'script'
562
+ }
563
+ }, {
564
+ code: (0, _dedent.default)`
565
+ const { [() => {}]: it } = require('@jest/globals');
566
+
567
+ it('is not a jest function', () => {});
568
+ `,
569
+ parserOptions: {
570
+ sourceType: 'script'
571
+ }
572
+ }],
573
+ invalid: []
574
+ });
575
+ ruleTester.run('global aliases', rule, {
576
+ valid: [{
577
+ code: 'xcontext("skip this please", () => {});',
578
+ settings: {
579
+ jest: {
580
+ globalAliases: {
581
+ describe: ['context']
582
+ }
583
+ }
584
+ }
585
+ }],
586
+ invalid: [{
587
+ code: 'context("when there is an error", () => {})',
588
+ errors: [{
589
+ messageId: 'details',
590
+ data: expectedParsedJestFnCallResultData({
591
+ name: 'describe',
592
+ type: 'describe',
593
+ head: {
594
+ original: 'describe',
595
+ local: 'context',
596
+ type: 'global',
597
+ node: 'context'
598
+ },
599
+ members: []
600
+ }),
601
+ column: 1,
602
+ line: 1
603
+ }],
604
+ settings: {
605
+ jest: {
606
+ globalAliases: {
607
+ describe: ['context']
608
+ }
609
+ }
610
+ }
611
+ }, {
612
+ code: 'context.skip("when there is an error", () => {})',
613
+ errors: [{
614
+ messageId: 'details',
615
+ data: expectedParsedJestFnCallResultData({
616
+ name: 'describe',
617
+ type: 'describe',
618
+ head: {
619
+ original: 'describe',
620
+ local: 'context',
621
+ type: 'global',
622
+ node: 'context'
623
+ },
624
+ members: ['skip']
625
+ }),
626
+ column: 1,
627
+ line: 1
628
+ }],
629
+ settings: {
630
+ jest: {
631
+ globalAliases: {
632
+ describe: ['context']
633
+ }
634
+ }
635
+ }
636
+ }, {
637
+ code: (0, _dedent.default)`
638
+ context("when there is an error", () => {})
639
+ xcontext("skip this please", () => {});
640
+ `,
641
+ errors: [{
642
+ messageId: 'details',
643
+ data: expectedParsedJestFnCallResultData({
644
+ name: 'xdescribe',
645
+ type: 'describe',
646
+ head: {
647
+ original: 'xdescribe',
648
+ local: 'xcontext',
649
+ type: 'global',
650
+ node: 'xcontext'
651
+ },
652
+ members: []
653
+ }),
654
+ column: 1,
655
+ line: 2
656
+ }],
657
+ settings: {
658
+ jest: {
659
+ globalAliases: {
660
+ xdescribe: ['xcontext']
661
+ }
662
+ }
663
+ }
664
+ }, {
665
+ code: (0, _dedent.default)`
666
+ context("when there is an error", () => {})
667
+ describe("when there is an error", () => {})
668
+ xcontext("skip this please", () => {});
669
+ `,
670
+ errors: [{
671
+ messageId: 'details',
672
+ data: expectedParsedJestFnCallResultData({
673
+ name: 'describe',
674
+ type: 'describe',
675
+ head: {
676
+ original: 'describe',
677
+ local: 'context',
678
+ type: 'global',
679
+ node: 'context'
680
+ },
681
+ members: []
682
+ }),
683
+ column: 1,
684
+ line: 1
685
+ }, {
686
+ messageId: 'details',
687
+ data: expectedParsedJestFnCallResultData({
688
+ name: 'describe',
689
+ type: 'describe',
690
+ head: {
691
+ original: null,
692
+ local: 'describe',
693
+ type: 'global',
694
+ node: 'describe'
695
+ },
696
+ members: []
697
+ }),
698
+ column: 1,
699
+ line: 2
700
+ }],
701
+ settings: {
702
+ jest: {
703
+ globalAliases: {
704
+ describe: ['context']
705
+ }
706
+ }
707
+ }
708
+ }]
709
+ });
710
+ ruleTester.run('typescript', rule, {
711
+ valid: [{
712
+ code: (0, _dedent.default)`
713
+ const { test };
714
+
715
+ test('is not a jest function', () => {});
716
+ `,
717
+ parser: require.resolve('@typescript-eslint/parser')
718
+ }, {
719
+ code: (0, _dedent.default)`
720
+ import type { it } from '@jest/globals';
721
+
722
+ it('is not a jest function', () => {});
723
+ `,
724
+ parser: require.resolve('@typescript-eslint/parser'),
725
+ parserOptions: {
726
+ sourceType: 'module'
727
+ }
728
+ }, {
729
+ code: (0, _dedent.default)`
730
+ import jest = require('@jest/globals');
731
+ const { it } = jest;
732
+
733
+ it('is not a jest function', () => {});
734
+ `,
735
+ parser: require.resolve('@typescript-eslint/parser'),
736
+ parserOptions: {
737
+ sourceType: 'module'
738
+ }
739
+ }, {
740
+ code: (0, _dedent.default)`
741
+ function it(message: string, fn: () => void): void;
742
+ function it(cases: unknown[], message: string, fn: () => void): void;
743
+ function it(...all: any[]): void {}
744
+
745
+ it('is not a jest function', () => {});
746
+ `,
747
+ parser: require.resolve('@typescript-eslint/parser'),
748
+ parserOptions: {
749
+ sourceType: 'module'
750
+ }
751
+ }, {
752
+ code: (0, _dedent.default)`
753
+ interface it {}
754
+ function it(...all: any[]): void {}
755
+
756
+ it('is not a jest function', () => {});
757
+ `,
758
+ parser: require.resolve('@typescript-eslint/parser'),
759
+ parserOptions: {
760
+ sourceType: 'module'
761
+ }
762
+ }, {
763
+ code: (0, _dedent.default)`
764
+ import { it } from '@jest/globals';
765
+ import { it } from '../it-utils';
766
+
767
+ it('is not a jest function', () => {});
768
+ `,
769
+ parser: require.resolve('@typescript-eslint/parser'),
770
+ parserOptions: {
771
+ sourceType: 'module'
772
+ }
773
+ }, {
774
+ code: (0, _dedent.default)`
775
+ import dedent = require('dedent');
776
+
777
+ dedent();
778
+ `,
779
+ parser: require.resolve('@typescript-eslint/parser')
780
+ }],
781
+ invalid: [{
782
+ code: (0, _dedent.default)`
783
+ import { it } from '../it-utils';
784
+ import { it } from '@jest/globals';
785
+
786
+ it('is a jest function', () => {});
787
+ `,
788
+ parser: require.resolve('@typescript-eslint/parser'),
789
+ parserOptions: {
790
+ sourceType: 'module'
791
+ },
792
+ errors: [{
793
+ messageId: 'details',
794
+ data: expectedParsedJestFnCallResultData({
795
+ name: 'it',
796
+ type: 'test',
797
+ head: {
798
+ original: 'it',
799
+ local: 'it',
800
+ type: 'import',
801
+ node: 'it'
802
+ },
803
+ members: []
804
+ }),
805
+ column: 1,
806
+ line: 4
807
+ }]
808
+ }]
809
+ });