eslint-plugin-jest 27.2.0 → 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 (79) 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-if.md +1 -1
  5. package/docs/rules/no-large-snapshots.md +4 -0
  6. package/docs/rules/require-hook.md +2 -6
  7. package/docs/rules/valid-expect.md +2 -2
  8. package/lib/index.js +5 -12
  9. package/lib/processors/__tests__/snapshot-processor.test.js +36 -0
  10. package/lib/rules/__tests__/consistent-test-it.test.js +921 -0
  11. package/lib/rules/__tests__/expect-expect.test.js +347 -0
  12. package/lib/rules/__tests__/fixtures/class.ts +13 -0
  13. package/lib/rules/__tests__/fixtures/file.ts +0 -0
  14. package/lib/rules/__tests__/fixtures/foo.ts +1 -0
  15. package/lib/rules/__tests__/fixtures/indent/indent-invalid-fixture-1.js +530 -0
  16. package/lib/rules/__tests__/fixtures/indent/indent-valid-fixture-1.js +530 -0
  17. package/lib/rules/__tests__/fixtures/react.tsx +0 -0
  18. package/lib/rules/__tests__/fixtures/tsconfig-withmeta.json +6 -0
  19. package/lib/rules/__tests__/fixtures/tsconfig.json +16 -0
  20. package/lib/rules/__tests__/fixtures/unstrict/file.ts +0 -0
  21. package/lib/rules/__tests__/fixtures/unstrict/react.tsx +0 -0
  22. package/lib/rules/__tests__/fixtures/unstrict/tsconfig.json +15 -0
  23. package/lib/rules/__tests__/max-expects.test.js +330 -0
  24. package/lib/rules/__tests__/max-nested-describe.test.js +247 -0
  25. package/lib/rules/__tests__/no-alias-methods.test.js +190 -0
  26. package/lib/rules/__tests__/no-commented-out-tests.test.js +213 -0
  27. package/lib/rules/__tests__/no-conditional-expect.test.js +696 -0
  28. package/lib/rules/__tests__/no-conditional-in-test.test.js +777 -0
  29. package/lib/rules/__tests__/no-deprecated-functions.test.js +119 -0
  30. package/lib/rules/__tests__/no-disabled-tests.test.js +241 -0
  31. package/lib/rules/__tests__/no-done-callback.test.js +424 -0
  32. package/lib/rules/__tests__/no-duplicate-hooks.test.js +469 -0
  33. package/lib/rules/__tests__/no-export.test.js +107 -0
  34. package/lib/rules/__tests__/no-focused-tests.test.js +373 -0
  35. package/lib/rules/__tests__/no-hooks.test.js +90 -0
  36. package/lib/rules/__tests__/no-identical-title.test.js +270 -0
  37. package/lib/rules/__tests__/no-if.test.js +787 -0
  38. package/lib/rules/__tests__/no-interpolation-in-snapshots.test.js +58 -0
  39. package/lib/rules/__tests__/no-jasmine-globals.test.js +206 -0
  40. package/lib/rules/__tests__/no-large-snapshots.test.js +237 -0
  41. package/lib/rules/__tests__/no-mocks-import.test.js +73 -0
  42. package/lib/rules/__tests__/no-restricted-jest-methods.test.js +103 -0
  43. package/lib/rules/__tests__/no-restricted-matchers.test.js +244 -0
  44. package/lib/rules/__tests__/no-standalone-expect.test.js +230 -0
  45. package/lib/rules/__tests__/no-test-prefixes.test.js +206 -0
  46. package/lib/rules/__tests__/no-test-return-statement.test.js +122 -0
  47. package/lib/rules/__tests__/no-untyped-mock-factory.test.js +149 -0
  48. package/lib/rules/__tests__/prefer-called-with.test.js +40 -0
  49. package/lib/rules/__tests__/prefer-comparison-matcher.test.js +200 -0
  50. package/lib/rules/__tests__/prefer-each.test.js +295 -0
  51. package/lib/rules/__tests__/prefer-equality-matcher.test.js +184 -0
  52. package/lib/rules/__tests__/prefer-expect-assertions.test.js +1437 -0
  53. package/lib/rules/__tests__/prefer-expect-resolves.test.js +96 -0
  54. package/lib/rules/__tests__/prefer-hooks-in-order.test.js +678 -0
  55. package/lib/rules/__tests__/prefer-hooks-on-top.test.js +218 -0
  56. package/lib/rules/__tests__/prefer-lowercase-title.test.js +619 -0
  57. package/lib/rules/__tests__/prefer-mock-promise-shorthand.test.js +360 -0
  58. package/lib/rules/__tests__/prefer-snapshot-hint.test.js +784 -0
  59. package/lib/rules/__tests__/prefer-spy-on.test.js +100 -0
  60. package/lib/rules/__tests__/prefer-strict-equal.test.js +46 -0
  61. package/lib/rules/__tests__/prefer-to-be.test.js +438 -0
  62. package/lib/rules/__tests__/prefer-to-contain.test.js +301 -0
  63. package/lib/rules/__tests__/prefer-to-have-length.test.js +99 -0
  64. package/lib/rules/__tests__/prefer-todo.test.js +78 -0
  65. package/lib/rules/__tests__/require-hook.test.js +403 -0
  66. package/lib/rules/__tests__/require-to-throw-message.test.js +108 -0
  67. package/lib/rules/__tests__/require-top-level-describe.test.js +236 -0
  68. package/lib/rules/__tests__/test-utils.js +11 -0
  69. package/lib/rules/__tests__/unbound-method.test.js +518 -0
  70. package/lib/rules/__tests__/valid-describe-callback.test.js +305 -0
  71. package/lib/rules/__tests__/valid-expect-in-promise.test.js +1583 -0
  72. package/lib/rules/__tests__/valid-expect.test.js +894 -0
  73. package/lib/rules/__tests__/valid-title.test.js +1147 -0
  74. package/lib/rules/utils/__tests__/detectJestVersion.test.js +221 -0
  75. package/lib/rules/utils/__tests__/parseJestFnCall.test.js +809 -0
  76. package/lib/rules/utils/accessors.js +4 -0
  77. package/lib/rules/utils/misc.js +36 -20
  78. package/lib/rules/valid-expect-in-promise.js +3 -3
  79. package/package.json +13 -9
@@ -0,0 +1,469 @@
1
+ "use strict";
2
+
3
+ var _utils = require("@typescript-eslint/utils");
4
+ var _dedent = _interopRequireDefault(require("dedent"));
5
+ var _noDuplicateHooks = _interopRequireDefault(require("../no-duplicate-hooks"));
6
+ var _testUtils = require("./test-utils");
7
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ const ruleTester = new _utils.TSESLint.RuleTester({
9
+ parser: _testUtils.espreeParser,
10
+ parserOptions: {
11
+ ecmaVersion: 2015
12
+ }
13
+ });
14
+ ruleTester.run('basic describe block', _noDuplicateHooks.default, {
15
+ valid: [(0, _dedent.default)`
16
+ describe("foo", () => {
17
+ beforeEach(() => {})
18
+ test("bar", () => {
19
+ someFn();
20
+ })
21
+ })
22
+ `, (0, _dedent.default)`
23
+ beforeEach(() => {})
24
+ test("bar", () => {
25
+ someFn();
26
+ })
27
+ `, (0, _dedent.default)`
28
+ describe("foo", () => {
29
+ beforeAll(() => {}),
30
+ beforeEach(() => {})
31
+ afterEach(() => {})
32
+ afterAll(() => {})
33
+
34
+ test("bar", () => {
35
+ someFn();
36
+ })
37
+ })
38
+ `],
39
+ invalid: [{
40
+ code: (0, _dedent.default)`
41
+ describe("foo", () => {
42
+ beforeEach(() => {}),
43
+ beforeEach(() => {}),
44
+ test("bar", () => {
45
+ someFn();
46
+ })
47
+ })
48
+ `,
49
+ errors: [{
50
+ messageId: 'noDuplicateHook',
51
+ data: {
52
+ hook: 'beforeEach'
53
+ },
54
+ column: 3,
55
+ line: 3
56
+ }]
57
+ }, {
58
+ code: (0, _dedent.default)`
59
+ describe.skip("foo", () => {
60
+ beforeEach(() => {}),
61
+ beforeAll(() => {}),
62
+ beforeAll(() => {}),
63
+ test("bar", () => {
64
+ someFn();
65
+ })
66
+ })
67
+ `,
68
+ errors: [{
69
+ messageId: 'noDuplicateHook',
70
+ data: {
71
+ hook: 'beforeAll'
72
+ },
73
+ column: 3,
74
+ line: 4
75
+ }]
76
+ }, {
77
+ code: (0, _dedent.default)`
78
+ describe.skip("foo", () => {
79
+ afterEach(() => {}),
80
+ afterEach(() => {}),
81
+ test("bar", () => {
82
+ someFn();
83
+ })
84
+ })
85
+ `,
86
+ errors: [{
87
+ messageId: 'noDuplicateHook',
88
+ data: {
89
+ hook: 'afterEach'
90
+ },
91
+ column: 3,
92
+ line: 3
93
+ }]
94
+ }, {
95
+ code: (0, _dedent.default)`
96
+ import { afterEach } from '@jest/globals';
97
+
98
+ describe.skip("foo", () => {
99
+ afterEach(() => {}),
100
+ afterEach(() => {}),
101
+ test("bar", () => {
102
+ someFn();
103
+ })
104
+ })
105
+ `,
106
+ parserOptions: {
107
+ sourceType: 'module'
108
+ },
109
+ errors: [{
110
+ messageId: 'noDuplicateHook',
111
+ data: {
112
+ hook: 'afterEach'
113
+ },
114
+ column: 3,
115
+ line: 5
116
+ }]
117
+ }, {
118
+ code: (0, _dedent.default)`
119
+ import { afterEach, afterEach as somethingElse } from '@jest/globals';
120
+
121
+ describe.skip("foo", () => {
122
+ afterEach(() => {}),
123
+ somethingElse(() => {}),
124
+ test("bar", () => {
125
+ someFn();
126
+ })
127
+ })
128
+ `,
129
+ parserOptions: {
130
+ sourceType: 'module'
131
+ },
132
+ errors: [{
133
+ messageId: 'noDuplicateHook',
134
+ data: {
135
+ hook: 'afterEach'
136
+ },
137
+ column: 3,
138
+ line: 5
139
+ }]
140
+ }, {
141
+ code: (0, _dedent.default)`
142
+ describe.skip("foo", () => {
143
+ afterAll(() => {}),
144
+ afterAll(() => {}),
145
+ test("bar", () => {
146
+ someFn();
147
+ })
148
+ })
149
+ `,
150
+ errors: [{
151
+ messageId: 'noDuplicateHook',
152
+ data: {
153
+ hook: 'afterAll'
154
+ },
155
+ column: 3,
156
+ line: 3
157
+ }]
158
+ }, {
159
+ code: (0, _dedent.default)`
160
+ afterAll(() => {}),
161
+ afterAll(() => {}),
162
+ test("bar", () => {
163
+ someFn();
164
+ })
165
+ `,
166
+ errors: [{
167
+ messageId: 'noDuplicateHook',
168
+ data: {
169
+ hook: 'afterAll'
170
+ },
171
+ column: 1,
172
+ line: 2
173
+ }]
174
+ }, {
175
+ code: (0, _dedent.default)`
176
+ describe("foo", () => {
177
+ beforeEach(() => {}),
178
+ beforeEach(() => {}),
179
+ beforeEach(() => {}),
180
+ test("bar", () => {
181
+ someFn();
182
+ })
183
+ })
184
+ `,
185
+ errors: [{
186
+ messageId: 'noDuplicateHook',
187
+ data: {
188
+ hook: 'beforeEach'
189
+ },
190
+ column: 3,
191
+ line: 3
192
+ }, {
193
+ messageId: 'noDuplicateHook',
194
+ data: {
195
+ hook: 'beforeEach'
196
+ },
197
+ column: 3,
198
+ line: 4
199
+ }]
200
+ }, {
201
+ code: (0, _dedent.default)`
202
+ describe.skip("foo", () => {
203
+ afterAll(() => {}),
204
+ afterAll(() => {}),
205
+ beforeAll(() => {}),
206
+ beforeAll(() => {}),
207
+ test("bar", () => {
208
+ someFn();
209
+ })
210
+ })
211
+ `,
212
+ errors: [{
213
+ messageId: 'noDuplicateHook',
214
+ data: {
215
+ hook: 'afterAll'
216
+ },
217
+ column: 3,
218
+ line: 3
219
+ }, {
220
+ messageId: 'noDuplicateHook',
221
+ data: {
222
+ hook: 'beforeAll'
223
+ },
224
+ column: 3,
225
+ line: 5
226
+ }]
227
+ }]
228
+ });
229
+ ruleTester.run('multiple describe blocks', _noDuplicateHooks.default, {
230
+ valid: [(0, _dedent.default)`
231
+ describe.skip("foo", () => {
232
+ beforeEach(() => {}),
233
+ beforeAll(() => {}),
234
+ test("bar", () => {
235
+ someFn();
236
+ })
237
+ })
238
+ describe("foo", () => {
239
+ beforeEach(() => {}),
240
+ beforeAll(() => {}),
241
+ test("bar", () => {
242
+ someFn();
243
+ })
244
+ })
245
+ `],
246
+ invalid: [{
247
+ code: (0, _dedent.default)`
248
+ describe.skip("foo", () => {
249
+ beforeEach(() => {}),
250
+ beforeAll(() => {}),
251
+ test("bar", () => {
252
+ someFn();
253
+ })
254
+ })
255
+ describe("foo", () => {
256
+ beforeEach(() => {}),
257
+ beforeEach(() => {}),
258
+ beforeAll(() => {}),
259
+ test("bar", () => {
260
+ someFn();
261
+ })
262
+ })
263
+ `,
264
+ errors: [{
265
+ messageId: 'noDuplicateHook',
266
+ data: {
267
+ hook: 'beforeEach'
268
+ },
269
+ column: 3,
270
+ line: 10
271
+ }]
272
+ }]
273
+ });
274
+ ruleTester.run('nested describe blocks', _noDuplicateHooks.default, {
275
+ valid: [(0, _dedent.default)`
276
+ describe("foo", () => {
277
+ beforeEach(() => {}),
278
+ test("bar", () => {
279
+ someFn();
280
+ })
281
+ describe("inner_foo", () => {
282
+ beforeEach(() => {})
283
+ test("inner bar", () => {
284
+ someFn();
285
+ })
286
+ })
287
+ })
288
+ `],
289
+ invalid: [{
290
+ code: (0, _dedent.default)`
291
+ describe("foo", () => {
292
+ beforeAll(() => {}),
293
+ test("bar", () => {
294
+ someFn();
295
+ })
296
+ describe("inner_foo", () => {
297
+ beforeEach(() => {})
298
+ beforeEach(() => {})
299
+ test("inner bar", () => {
300
+ someFn();
301
+ })
302
+ })
303
+ })
304
+ `,
305
+ errors: [{
306
+ messageId: 'noDuplicateHook',
307
+ data: {
308
+ hook: 'beforeEach'
309
+ },
310
+ column: 5,
311
+ line: 8
312
+ }]
313
+ }]
314
+ });
315
+ ruleTester.run('describe.each blocks', _noDuplicateHooks.default, {
316
+ valid: [(0, _dedent.default)`
317
+ describe.each(['hello'])('%s', () => {
318
+ beforeEach(() => {});
319
+
320
+ it('is fine', () => {});
321
+ });
322
+ `, (0, _dedent.default)`
323
+ describe('something', () => {
324
+ describe.each(['hello'])('%s', () => {
325
+ beforeEach(() => {});
326
+
327
+ it('is fine', () => {});
328
+ });
329
+
330
+ describe.each(['world'])('%s', () => {
331
+ beforeEach(() => {});
332
+
333
+ it('is fine', () => {});
334
+ });
335
+ });
336
+ `, (0, _dedent.default)`
337
+ describe.each\`\`('%s', () => {
338
+ beforeEach(() => {});
339
+
340
+ it('is fine', () => {});
341
+ });
342
+ `, (0, _dedent.default)`
343
+ describe('something', () => {
344
+ describe.each\`\`('%s', () => {
345
+ beforeEach(() => {});
346
+
347
+ it('is fine', () => {});
348
+ });
349
+
350
+ describe.each\`\`('%s', () => {
351
+ beforeEach(() => {});
352
+
353
+ it('is fine', () => {});
354
+ });
355
+ });
356
+ `],
357
+ invalid: [{
358
+ code: (0, _dedent.default)`
359
+ describe.each(['hello'])('%s', () => {
360
+ beforeEach(() => {});
361
+ beforeEach(() => {});
362
+
363
+ it('is not fine', () => {});
364
+ });
365
+ `,
366
+ errors: [{
367
+ messageId: 'noDuplicateHook',
368
+ data: {
369
+ hook: 'beforeEach'
370
+ },
371
+ column: 3,
372
+ line: 3
373
+ }]
374
+ }, {
375
+ code: (0, _dedent.default)`
376
+ describe('something', () => {
377
+ describe.each(['hello'])('%s', () => {
378
+ beforeEach(() => {});
379
+
380
+ it('is fine', () => {});
381
+ });
382
+
383
+ describe.each(['world'])('%s', () => {
384
+ beforeEach(() => {});
385
+ beforeEach(() => {});
386
+
387
+ it('is not fine', () => {});
388
+ });
389
+ });
390
+ `,
391
+ errors: [{
392
+ messageId: 'noDuplicateHook',
393
+ data: {
394
+ hook: 'beforeEach'
395
+ },
396
+ column: 5,
397
+ line: 10
398
+ }]
399
+ }, {
400
+ code: (0, _dedent.default)`
401
+ describe('something', () => {
402
+ describe.each(['hello'])('%s', () => {
403
+ beforeEach(() => {});
404
+
405
+ it('is fine', () => {});
406
+ });
407
+
408
+ describe.each(['world'])('%s', () => {
409
+ describe('some more', () => {
410
+ beforeEach(() => {});
411
+ beforeEach(() => {});
412
+
413
+ it('is not fine', () => {});
414
+ });
415
+ });
416
+ });
417
+ `,
418
+ errors: [{
419
+ messageId: 'noDuplicateHook',
420
+ data: {
421
+ hook: 'beforeEach'
422
+ },
423
+ column: 7,
424
+ line: 11
425
+ }]
426
+ }, {
427
+ code: (0, _dedent.default)`
428
+ describe.each\`\`('%s', () => {
429
+ beforeEach(() => {});
430
+ beforeEach(() => {});
431
+
432
+ it('is fine', () => {});
433
+ });
434
+ `,
435
+ errors: [{
436
+ messageId: 'noDuplicateHook',
437
+ data: {
438
+ hook: 'beforeEach'
439
+ },
440
+ column: 3,
441
+ line: 3
442
+ }]
443
+ }, {
444
+ code: (0, _dedent.default)`
445
+ describe('something', () => {
446
+ describe.each\`\`('%s', () => {
447
+ beforeEach(() => {});
448
+
449
+ it('is fine', () => {});
450
+ });
451
+
452
+ describe.each\`\`('%s', () => {
453
+ beforeEach(() => {});
454
+ beforeEach(() => {});
455
+
456
+ it('is not fine', () => {});
457
+ });
458
+ });
459
+ `,
460
+ errors: [{
461
+ messageId: 'noDuplicateHook',
462
+ data: {
463
+ hook: 'beforeEach'
464
+ },
465
+ column: 5,
466
+ line: 10
467
+ }]
468
+ }]
469
+ });
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ var _utils = require("@typescript-eslint/utils");
4
+ var _dedent = _interopRequireDefault(require("dedent"));
5
+ var _noExport = _interopRequireDefault(require("../no-export"));
6
+ var _testUtils = require("./test-utils");
7
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ const ruleTester = new _utils.TSESLint.RuleTester({
9
+ parser: _testUtils.espreeParser,
10
+ parserOptions: {
11
+ ecmaVersion: 2015,
12
+ sourceType: 'module'
13
+ }
14
+ });
15
+ ruleTester.run('no-export', _noExport.default, {
16
+ valid: ['describe("a test", () => { expect(1).toBe(1); })', 'window.location = "valid"', 'module.somethingElse = "foo";', 'export const myThing = "valid"', 'export default function () {}', 'module.exports = function(){}', 'module.exports.myThing = "valid";'],
17
+ invalid: [{
18
+ code: 'export const myThing = "invalid"; test("a test", () => { expect(1).toBe(1);});',
19
+ parserOptions: {
20
+ sourceType: 'module'
21
+ },
22
+ errors: [{
23
+ endColumn: 34,
24
+ column: 1,
25
+ messageId: 'unexpectedExport'
26
+ }]
27
+ }, {
28
+ code: (0, _dedent.default)`
29
+ export const myThing = 'invalid';
30
+
31
+ test.each()('my code', () => {
32
+ expect(1).toBe(1);
33
+ });
34
+ `,
35
+ parserOptions: {
36
+ sourceType: 'module'
37
+ },
38
+ errors: [{
39
+ endColumn: 34,
40
+ column: 1,
41
+ messageId: 'unexpectedExport'
42
+ }]
43
+ }, {
44
+ code: (0, _dedent.default)`
45
+ export const myThing = 'invalid';
46
+
47
+ test.each\`\`('my code', () => {
48
+ expect(1).toBe(1);
49
+ });
50
+ `,
51
+ parserOptions: {
52
+ sourceType: 'module'
53
+ },
54
+ errors: [{
55
+ endColumn: 34,
56
+ column: 1,
57
+ messageId: 'unexpectedExport'
58
+ }]
59
+ }, {
60
+ code: (0, _dedent.default)`
61
+ export const myThing = 'invalid';
62
+
63
+ test.only.each\`\`('my code', () => {
64
+ expect(1).toBe(1);
65
+ });
66
+ `,
67
+ parserOptions: {
68
+ sourceType: 'module'
69
+ },
70
+ errors: [{
71
+ endColumn: 34,
72
+ column: 1,
73
+ messageId: 'unexpectedExport'
74
+ }]
75
+ }, {
76
+ code: 'export default function() {}; test("a test", () => { expect(1).toBe(1);});',
77
+ parserOptions: {
78
+ sourceType: 'module'
79
+ },
80
+ errors: [{
81
+ endColumn: 29,
82
+ column: 1,
83
+ messageId: 'unexpectedExport'
84
+ }]
85
+ }, {
86
+ code: 'module.exports["invalid"] = function() {}; test("a test", () => { expect(1).toBe(1);});',
87
+ errors: [{
88
+ endColumn: 26,
89
+ column: 1,
90
+ messageId: 'unexpectedExport'
91
+ }]
92
+ }, {
93
+ code: 'module.exports = function() {}; ; test("a test", () => { expect(1).toBe(1);});',
94
+ errors: [{
95
+ endColumn: 15,
96
+ column: 1,
97
+ messageId: 'unexpectedExport'
98
+ }]
99
+ }, {
100
+ code: 'module.export.invalid = function() {}; ; test("a test", () => { expect(1).toBe(1);});',
101
+ errors: [{
102
+ endColumn: 22,
103
+ column: 1,
104
+ messageId: 'unexpectedExport'
105
+ }]
106
+ }]
107
+ });