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,894 @@
1
+ "use strict";
2
+
3
+ var _utils = require("@typescript-eslint/utils");
4
+ var _dedent = _interopRequireDefault(require("dedent"));
5
+ var _validExpect = _interopRequireDefault(require("../valid-expect"));
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: 2017
12
+ }
13
+ });
14
+ ruleTester.run('valid-expect', _validExpect.default, {
15
+ valid: ['expect.hasAssertions', 'expect.hasAssertions()', 'expect("something").toEqual("else");', 'expect(true).toBeDefined();', 'expect([1, 2, 3]).toEqual([1, 2, 3]);', 'expect(undefined).not.toBeDefined();', 'test("valid-expect", () => { return expect(Promise.resolve(2)).resolves.toBeDefined(); });', 'test("valid-expect", () => { return expect(Promise.reject(2)).rejects.toBeDefined(); });', 'test("valid-expect", () => { return expect(Promise.resolve(2)).resolves.not.toBeDefined(); });', 'test("valid-expect", () => { return expect(Promise.resolve(2)).rejects.not.toBeDefined(); });', 'test("valid-expect", function () { return expect(Promise.resolve(2)).resolves.not.toBeDefined(); });', 'test("valid-expect", function () { return expect(Promise.resolve(2)).rejects.not.toBeDefined(); });', 'test("valid-expect", function () { return Promise.resolve(expect(Promise.resolve(2)).resolves.not.toBeDefined()); });', 'test("valid-expect", function () { return Promise.resolve(expect(Promise.resolve(2)).rejects.not.toBeDefined()); });', {
16
+ code: 'test("valid-expect", () => expect(Promise.resolve(2)).resolves.toBeDefined());',
17
+ options: [{
18
+ alwaysAwait: true
19
+ }]
20
+ }, 'test("valid-expect", () => expect(Promise.resolve(2)).resolves.toBeDefined());', 'test("valid-expect", () => expect(Promise.reject(2)).rejects.toBeDefined());', 'test("valid-expect", () => expect(Promise.reject(2)).resolves.not.toBeDefined());', 'test("valid-expect", () => expect(Promise.reject(2)).rejects.not.toBeDefined());', 'test("valid-expect", async () => { await expect(Promise.reject(2)).resolves.not.toBeDefined(); });', 'test("valid-expect", async () => { await expect(Promise.reject(2)).rejects.not.toBeDefined(); });', 'test("valid-expect", async function () { await expect(Promise.reject(2)).resolves.not.toBeDefined(); });', 'test("valid-expect", async function () { await expect(Promise.reject(2)).rejects.not.toBeDefined(); });', 'test("valid-expect", async () => { await Promise.resolve(expect(Promise.reject(2)).rejects.not.toBeDefined()); });', 'test("valid-expect", async () => { await Promise.reject(expect(Promise.reject(2)).rejects.not.toBeDefined()); });', 'test("valid-expect", async () => { await Promise.all([expect(Promise.reject(2)).rejects.not.toBeDefined(), expect(Promise.reject(2)).rejects.not.toBeDefined()]); });', 'test("valid-expect", async () => { await Promise.race([expect(Promise.reject(2)).rejects.not.toBeDefined(), expect(Promise.reject(2)).rejects.not.toBeDefined()]); });', 'test("valid-expect", async () => { await Promise.allSettled([expect(Promise.reject(2)).rejects.not.toBeDefined(), expect(Promise.reject(2)).rejects.not.toBeDefined()]); });', 'test("valid-expect", async () => { await Promise.any([expect(Promise.reject(2)).rejects.not.toBeDefined(), expect(Promise.reject(2)).rejects.not.toBeDefined()]); });', 'test("valid-expect", async () => { return expect(Promise.reject(2)).resolves.not.toBeDefined().then(() => console.log("valid-case")); });', 'test("valid-expect", async () => { return expect(Promise.reject(2)).resolves.not.toBeDefined().then(() => console.log("valid-case")).then(() => console.log("another valid case")); });', 'test("valid-expect", async () => { return expect(Promise.reject(2)).resolves.not.toBeDefined().catch(() => console.log("valid-case")); });', 'test("valid-expect", async () => { return expect(Promise.reject(2)).resolves.not.toBeDefined().then(() => console.log("valid-case")).catch(() => console.log("another valid case")); });', 'test("valid-expect", async () => { return expect(Promise.reject(2)).resolves.not.toBeDefined().then(() => { expect(someMock).toHaveBeenCalledTimes(1); }); });', 'test("valid-expect", async () => { await expect(Promise.reject(2)).resolves.not.toBeDefined().then(() => console.log("valid-case")); });', 'test("valid-expect", async () => { await expect(Promise.reject(2)).resolves.not.toBeDefined().then(() => console.log("valid-case")).then(() => console.log("another valid case")); });', 'test("valid-expect", async () => { await expect(Promise.reject(2)).resolves.not.toBeDefined().catch(() => console.log("valid-case")); });', 'test("valid-expect", async () => { await expect(Promise.reject(2)).resolves.not.toBeDefined().then(() => console.log("valid-case")).catch(() => console.log("another valid case")); });', 'test("valid-expect", async () => { await expect(Promise.reject(2)).resolves.not.toBeDefined().then(() => { expect(someMock).toHaveBeenCalledTimes(1); }); });', (0, _dedent.default)`
21
+ test("valid-expect", () => {
22
+ return expect(functionReturningAPromise()).resolves.toEqual(1).then(() => {
23
+ return expect(Promise.resolve(2)).resolves.toBe(1);
24
+ });
25
+ });
26
+ `, (0, _dedent.default)`
27
+ test("valid-expect", () => {
28
+ return expect(functionReturningAPromise()).resolves.toEqual(1).then(async () => {
29
+ await expect(Promise.resolve(2)).resolves.toBe(1);
30
+ });
31
+ });
32
+ `, (0, _dedent.default)`
33
+ test("valid-expect", () => {
34
+ return expect(functionReturningAPromise()).resolves.toEqual(1).then(() => expect(Promise.resolve(2)).resolves.toBe(1));
35
+ });
36
+ `, (0, _dedent.default)`
37
+ expect.extend({
38
+ toResolve(obj) {
39
+ return this.isNot
40
+ ? expect(obj).toBe(true)
41
+ : expect(obj).resolves.not.toThrow();
42
+ }
43
+ });
44
+ `, (0, _dedent.default)`
45
+ expect.extend({
46
+ toResolve(obj) {
47
+ return this.isNot
48
+ ? expect(obj).resolves.not.toThrow()
49
+ : expect(obj).toBe(true);
50
+ }
51
+ });
52
+ `, (0, _dedent.default)`
53
+ expect.extend({
54
+ toResolve(obj) {
55
+ return this.isNot
56
+ ? expect(obj).toBe(true)
57
+ : anotherCondition
58
+ ? expect(obj).resolves.not.toThrow()
59
+ : expect(obj).toBe(false)
60
+ }
61
+ });
62
+ `, {
63
+ code: 'expect(1).toBe(2);',
64
+ options: [{
65
+ maxArgs: 2
66
+ }]
67
+ }, {
68
+ code: 'expect(1, "1 !== 2").toBe(2);',
69
+ options: [{
70
+ maxArgs: 2
71
+ }]
72
+ }, {
73
+ code: 'expect(1, "1 !== 2").toBe(2);',
74
+ options: [{
75
+ maxArgs: 2,
76
+ minArgs: 2
77
+ }]
78
+ }, {
79
+ code: 'test("valid-expect", () => { expect(2).not.toBe(2); });',
80
+ options: [{
81
+ asyncMatchers: ['toRejectWith']
82
+ }]
83
+ }, {
84
+ code: 'test("valid-expect", () => { expect(Promise.reject(2)).toRejectWith(2); });',
85
+ options: [{
86
+ asyncMatchers: ['toResolveWith']
87
+ }]
88
+ }, {
89
+ code: 'test("valid-expect", async () => { await expect(Promise.resolve(2)).toResolve(); });',
90
+ options: [{
91
+ asyncMatchers: ['toResolveWith']
92
+ }]
93
+ }, {
94
+ code: 'test("valid-expect", async () => { expect(Promise.resolve(2)).toResolve(); });',
95
+ options: [{
96
+ asyncMatchers: ['toResolveWith']
97
+ }]
98
+ }],
99
+ invalid: [{
100
+ code: 'expect().toBe(2);',
101
+ options: [{
102
+ minArgs: undefined,
103
+ maxArgs: undefined
104
+ }],
105
+ errors: [{
106
+ messageId: 'notEnoughArgs',
107
+ data: {
108
+ s: '',
109
+ amount: 1
110
+ }
111
+ }]
112
+ }, {
113
+ code: 'expect().toBe(true);',
114
+ errors: [{
115
+ endColumn: 8,
116
+ column: 7,
117
+ messageId: 'notEnoughArgs',
118
+ data: {
119
+ s: '',
120
+ amount: 1
121
+ }
122
+ }]
123
+ }, {
124
+ code: 'expect().toEqual("something");',
125
+ errors: [{
126
+ endColumn: 8,
127
+ column: 7,
128
+ messageId: 'notEnoughArgs',
129
+ data: {
130
+ s: '',
131
+ amount: 1
132
+ }
133
+ }]
134
+ }, {
135
+ code: 'expect("something", "else").toEqual("something");',
136
+ errors: [{
137
+ endColumn: 26,
138
+ column: 21,
139
+ messageId: 'tooManyArgs',
140
+ data: {
141
+ s: '',
142
+ amount: 1
143
+ }
144
+ }]
145
+ }, {
146
+ code: 'expect("something", "else", "entirely").toEqual("something");',
147
+ options: [{
148
+ maxArgs: 2
149
+ }],
150
+ errors: [{
151
+ endColumn: 38,
152
+ column: 29,
153
+ messageId: 'tooManyArgs',
154
+ data: {
155
+ s: 's',
156
+ amount: 2
157
+ }
158
+ }]
159
+ }, {
160
+ code: 'expect("something", "else", "entirely").toEqual("something");',
161
+ options: [{
162
+ maxArgs: 2,
163
+ minArgs: 2
164
+ }],
165
+ errors: [{
166
+ endColumn: 38,
167
+ column: 29,
168
+ messageId: 'tooManyArgs',
169
+ data: {
170
+ s: 's',
171
+ amount: 2
172
+ }
173
+ }]
174
+ }, {
175
+ code: 'expect("something", "else", "entirely").toEqual("something");',
176
+ options: [{
177
+ maxArgs: 2,
178
+ minArgs: 1
179
+ }],
180
+ errors: [{
181
+ endColumn: 38,
182
+ column: 29,
183
+ messageId: 'tooManyArgs',
184
+ data: {
185
+ s: 's',
186
+ amount: 2
187
+ }
188
+ }]
189
+ }, {
190
+ code: 'expect("something").toEqual("something");',
191
+ options: [{
192
+ minArgs: 2
193
+ }],
194
+ errors: [{
195
+ endColumn: 8,
196
+ column: 7,
197
+ messageId: 'notEnoughArgs',
198
+ data: {
199
+ s: 's',
200
+ amount: 2
201
+ }
202
+ }]
203
+ }, {
204
+ code: 'expect("something", "else").toEqual("something");',
205
+ options: [{
206
+ maxArgs: 1,
207
+ minArgs: 3
208
+ }],
209
+ errors: [{
210
+ endColumn: 8,
211
+ column: 7,
212
+ messageId: 'notEnoughArgs',
213
+ data: {
214
+ s: 's',
215
+ amount: 3
216
+ }
217
+ }, {
218
+ endColumn: 26,
219
+ column: 21,
220
+ messageId: 'tooManyArgs',
221
+ data: {
222
+ s: '',
223
+ amount: 1
224
+ }
225
+ }]
226
+ }, {
227
+ code: 'expect("something");',
228
+ errors: [{
229
+ endColumn: 20,
230
+ column: 1,
231
+ messageId: 'matcherNotFound'
232
+ }]
233
+ }, {
234
+ code: 'expect();',
235
+ errors: [{
236
+ endColumn: 9,
237
+ column: 1,
238
+ messageId: 'matcherNotFound'
239
+ }]
240
+ }, {
241
+ code: 'expect(true).toBeDefined;',
242
+ errors: [{
243
+ endColumn: 25,
244
+ column: 14,
245
+ messageId: 'matcherNotCalled'
246
+ }]
247
+ }, {
248
+ code: 'expect(true).not.toBeDefined;',
249
+ errors: [{
250
+ endColumn: 29,
251
+ column: 18,
252
+ messageId: 'matcherNotCalled'
253
+ }]
254
+ }, {
255
+ code: 'expect(true).nope.toBeDefined;',
256
+ errors: [{
257
+ endColumn: 30,
258
+ column: 19,
259
+ messageId: 'matcherNotCalled'
260
+ }]
261
+ }, {
262
+ code: 'expect(true).nope.toBeDefined();',
263
+ errors: [{
264
+ endColumn: 32,
265
+ column: 1,
266
+ messageId: 'modifierUnknown'
267
+ }]
268
+ }, {
269
+ code: 'expect(true).not.resolves.toBeDefined();',
270
+ errors: [{
271
+ endColumn: 40,
272
+ column: 1,
273
+ messageId: 'modifierUnknown'
274
+ }]
275
+ }, {
276
+ code: 'expect(true).not.not.toBeDefined();',
277
+ errors: [{
278
+ endColumn: 35,
279
+ column: 1,
280
+ messageId: 'modifierUnknown'
281
+ }]
282
+ }, {
283
+ code: 'expect(true).resolves.not.exactly.toBeDefined();',
284
+ errors: [{
285
+ endColumn: 48,
286
+ column: 1,
287
+ messageId: 'modifierUnknown'
288
+ }]
289
+ }, {
290
+ code: 'expect(true).resolves;',
291
+ errors: [{
292
+ endColumn: 22,
293
+ column: 14,
294
+ messageId: 'matcherNotFound'
295
+ }]
296
+ }, {
297
+ code: 'expect(true).rejects;',
298
+ errors: [{
299
+ endColumn: 21,
300
+ column: 14,
301
+ messageId: 'matcherNotFound'
302
+ }]
303
+ }, {
304
+ code: 'expect(true).not;',
305
+ errors: [{
306
+ endColumn: 17,
307
+ column: 14,
308
+ messageId: 'matcherNotFound'
309
+ }]
310
+ },
311
+ /**
312
+ * .resolves & .rejects checks
313
+ */
314
+ // Inline usages
315
+ {
316
+ code: 'expect(Promise.resolve(2)).resolves.toBeDefined();',
317
+ errors: [{
318
+ column: 1,
319
+ endColumn: 50,
320
+ messageId: 'asyncMustBeAwaited',
321
+ data: {
322
+ orReturned: ' or returned'
323
+ }
324
+ }]
325
+ }, {
326
+ code: 'expect(Promise.resolve(2)).rejects.toBeDefined();',
327
+ errors: [{
328
+ column: 1,
329
+ endColumn: 49,
330
+ messageId: 'asyncMustBeAwaited',
331
+ data: {
332
+ orReturned: ' or returned'
333
+ }
334
+ }]
335
+ },
336
+ // alwaysAwait option changes error message
337
+ {
338
+ code: 'expect(Promise.resolve(2)).resolves.toBeDefined();',
339
+ options: [{
340
+ alwaysAwait: true
341
+ }],
342
+ errors: [{
343
+ column: 1,
344
+ endColumn: 50,
345
+ messageId: 'asyncMustBeAwaited'
346
+ }]
347
+ }, {
348
+ code: (0, _dedent.default)`
349
+ expect.extend({
350
+ toResolve(obj) {
351
+ this.isNot
352
+ ? expect(obj).toBe(true)
353
+ : expect(obj).resolves.not.toThrow();
354
+ }
355
+ });
356
+ `,
357
+ errors: [{
358
+ column: 9,
359
+ endColumn: 43,
360
+ messageId: 'asyncMustBeAwaited'
361
+ }]
362
+ }, {
363
+ code: (0, _dedent.default)`
364
+ expect.extend({
365
+ toResolve(obj) {
366
+ this.isNot
367
+ ? expect(obj).resolves.not.toThrow()
368
+ : expect(obj).toBe(true);
369
+ }
370
+ });
371
+ `,
372
+ errors: [{
373
+ column: 9,
374
+ endColumn: 43,
375
+ messageId: 'asyncMustBeAwaited'
376
+ }]
377
+ }, {
378
+ code: (0, _dedent.default)`
379
+ expect.extend({
380
+ toResolve(obj) {
381
+ this.isNot
382
+ ? expect(obj).toBe(true)
383
+ : anotherCondition
384
+ ? expect(obj).resolves.not.toThrow()
385
+ : expect(obj).toBe(false)
386
+ }
387
+ });
388
+ `,
389
+ errors: [{
390
+ column: 9,
391
+ endColumn: 43,
392
+ messageId: 'asyncMustBeAwaited'
393
+ }]
394
+ },
395
+ // expect().resolves
396
+ {
397
+ code: 'test("valid-expect", () => { expect(Promise.resolve(2)).resolves.toBeDefined(); });',
398
+ errors: [{
399
+ column: 30,
400
+ endColumn: 79,
401
+ messageId: 'asyncMustBeAwaited',
402
+ data: {
403
+ orReturned: ' or returned'
404
+ }
405
+ }]
406
+ }, {
407
+ code: 'test("valid-expect", () => { expect(Promise.resolve(2)).toResolve(); });',
408
+ errors: [{
409
+ messageId: 'asyncMustBeAwaited',
410
+ data: {
411
+ orReturned: ' or returned'
412
+ },
413
+ column: 30,
414
+ line: 1
415
+ }]
416
+ }, {
417
+ code: 'test("valid-expect", () => { expect(Promise.resolve(2)).toResolve(); });',
418
+ options: [{
419
+ asyncMatchers: undefined
420
+ }],
421
+ errors: [{
422
+ messageId: 'asyncMustBeAwaited',
423
+ data: {
424
+ orReturned: ' or returned'
425
+ },
426
+ column: 30,
427
+ line: 1
428
+ }]
429
+ }, {
430
+ code: 'test("valid-expect", () => { expect(Promise.resolve(2)).toReject(); });',
431
+ errors: [{
432
+ messageId: 'asyncMustBeAwaited',
433
+ data: {
434
+ orReturned: ' or returned'
435
+ },
436
+ column: 30,
437
+ line: 1
438
+ }]
439
+ }, {
440
+ code: 'test("valid-expect", () => { expect(Promise.resolve(2)).not.toReject(); });',
441
+ errors: [{
442
+ messageId: 'asyncMustBeAwaited',
443
+ data: {
444
+ orReturned: ' or returned'
445
+ },
446
+ column: 30,
447
+ line: 1
448
+ }]
449
+ },
450
+ // expect().resolves.not
451
+ {
452
+ code: 'test("valid-expect", () => { expect(Promise.resolve(2)).resolves.not.toBeDefined(); });',
453
+ errors: [{
454
+ column: 30,
455
+ endColumn: 83,
456
+ messageId: 'asyncMustBeAwaited',
457
+ data: {
458
+ orReturned: ' or returned'
459
+ }
460
+ }]
461
+ },
462
+ // expect().rejects
463
+ {
464
+ code: 'test("valid-expect", () => { expect(Promise.resolve(2)).rejects.toBeDefined(); });',
465
+ errors: [{
466
+ column: 30,
467
+ endColumn: 78,
468
+ messageId: 'asyncMustBeAwaited',
469
+ data: {
470
+ orReturned: ' or returned'
471
+ }
472
+ }]
473
+ },
474
+ // expect().rejects.not
475
+ {
476
+ code: 'test("valid-expect", () => { expect(Promise.resolve(2)).rejects.not.toBeDefined(); });',
477
+ errors: [{
478
+ column: 30,
479
+ endColumn: 82,
480
+ messageId: 'asyncMustBeAwaited',
481
+ data: {
482
+ orReturned: ' or returned'
483
+ }
484
+ }]
485
+ },
486
+ // usages in async function
487
+ {
488
+ code: 'test("valid-expect", async () => { expect(Promise.resolve(2)).resolves.toBeDefined(); });',
489
+ errors: [{
490
+ column: 36,
491
+ endColumn: 85,
492
+ messageId: 'asyncMustBeAwaited',
493
+ data: {
494
+ orReturned: ' or returned'
495
+ }
496
+ }]
497
+ }, {
498
+ code: 'test("valid-expect", async () => { expect(Promise.resolve(2)).resolves.not.toBeDefined(); });',
499
+ errors: [{
500
+ column: 36,
501
+ endColumn: 89,
502
+ messageId: 'asyncMustBeAwaited',
503
+ data: {
504
+ orReturned: ' or returned'
505
+ }
506
+ }]
507
+ }, {
508
+ code: 'test("valid-expect", () => { expect(Promise.reject(2)).toRejectWith(2); });',
509
+ options: [{
510
+ asyncMatchers: ['toRejectWith']
511
+ }],
512
+ errors: [{
513
+ messageId: 'asyncMustBeAwaited',
514
+ data: {
515
+ orReturned: ' or returned'
516
+ },
517
+ column: 30
518
+ }]
519
+ }, {
520
+ code: 'test("valid-expect", () => { expect(Promise.reject(2)).rejects.toBe(2); });',
521
+ options: [{
522
+ asyncMatchers: ['toRejectWith']
523
+ }],
524
+ errors: [{
525
+ messageId: 'asyncMustBeAwaited',
526
+ data: {
527
+ orReturned: ' or returned'
528
+ },
529
+ column: 30
530
+ }]
531
+ },
532
+ // alwaysAwait:false, one not awaited
533
+ {
534
+ code: (0, _dedent.default)`
535
+ test("valid-expect", async () => {
536
+ expect(Promise.resolve(2)).resolves.not.toBeDefined();
537
+ expect(Promise.resolve(1)).rejects.toBeDefined();
538
+ });
539
+ `,
540
+ errors: [{
541
+ line: 2,
542
+ column: 3,
543
+ endColumn: 56,
544
+ messageId: 'asyncMustBeAwaited',
545
+ data: {
546
+ orReturned: ' or returned'
547
+ }
548
+ }, {
549
+ line: 3,
550
+ column: 3,
551
+ endColumn: 51,
552
+ messageId: 'asyncMustBeAwaited',
553
+ data: {
554
+ orReturned: ' or returned'
555
+ }
556
+ }]
557
+ },
558
+ // alwaysAwait: true, one returned
559
+ {
560
+ code: (0, _dedent.default)`
561
+ test("valid-expect", async () => {
562
+ await expect(Promise.resolve(2)).resolves.not.toBeDefined();
563
+ expect(Promise.resolve(1)).rejects.toBeDefined();
564
+ });
565
+ `,
566
+ errors: [{
567
+ line: 3,
568
+ column: 3,
569
+ endColumn: 51,
570
+ messageId: 'asyncMustBeAwaited',
571
+ data: {
572
+ orReturned: ' or returned'
573
+ }
574
+ }]
575
+ },
576
+ /**
577
+ * Multiple async assertions
578
+ */
579
+ // both not awaited
580
+ {
581
+ code: (0, _dedent.default)`
582
+ test("valid-expect", async () => {
583
+ expect(Promise.resolve(2)).resolves.not.toBeDefined();
584
+ return expect(Promise.resolve(1)).rejects.toBeDefined();
585
+ });
586
+ `,
587
+ options: [{
588
+ alwaysAwait: true
589
+ }],
590
+ errors: [{
591
+ line: 2,
592
+ column: 3,
593
+ endColumn: 56,
594
+ messageId: 'asyncMustBeAwaited'
595
+ }, {
596
+ line: 3,
597
+ column: 10,
598
+ endColumn: 58,
599
+ messageId: 'asyncMustBeAwaited'
600
+ }]
601
+ },
602
+ // alwaysAwait:true, one not awaited, one returned
603
+ {
604
+ code: (0, _dedent.default)`
605
+ test("valid-expect", async () => {
606
+ expect(Promise.resolve(2)).resolves.not.toBeDefined();
607
+ return expect(Promise.resolve(1)).rejects.toBeDefined();
608
+ });
609
+ `,
610
+ errors: [{
611
+ line: 2,
612
+ column: 3,
613
+ endColumn: 56,
614
+ messageId: 'asyncMustBeAwaited',
615
+ data: {
616
+ orReturned: ' or returned'
617
+ }
618
+ }]
619
+ },
620
+ // one not awaited
621
+ {
622
+ code: (0, _dedent.default)`
623
+ test("valid-expect", async () => {
624
+ await expect(Promise.resolve(2)).resolves.not.toBeDefined();
625
+ return expect(Promise.resolve(1)).rejects.toBeDefined();
626
+ });
627
+ `,
628
+ options: [{
629
+ alwaysAwait: true
630
+ }],
631
+ errors: [{
632
+ line: 3,
633
+ column: 10,
634
+ endColumn: 58,
635
+ messageId: 'asyncMustBeAwaited'
636
+ }]
637
+ }, {
638
+ code: (0, _dedent.default)`
639
+ test("valid-expect", async () => {
640
+ await expect(Promise.resolve(2)).toResolve();
641
+ return expect(Promise.resolve(1)).toReject();
642
+ });
643
+ `,
644
+ options: [{
645
+ alwaysAwait: true
646
+ }],
647
+ errors: [{
648
+ messageId: 'asyncMustBeAwaited',
649
+ column: 10,
650
+ line: 3
651
+ }]
652
+ },
653
+ /**
654
+ * Promise.x(expect()) usages
655
+ */
656
+ {
657
+ code: (0, _dedent.default)`
658
+ test("valid-expect", () => {
659
+ Promise.resolve(expect(Promise.resolve(2)).resolves.not.toBeDefined());
660
+ });
661
+ `,
662
+ errors: [{
663
+ line: 2,
664
+ column: 3,
665
+ endColumn: 73,
666
+ messageId: 'promisesWithAsyncAssertionsMustBeAwaited',
667
+ data: {
668
+ orReturned: ' or returned'
669
+ }
670
+ }]
671
+ }, {
672
+ code: (0, _dedent.default)`
673
+ test("valid-expect", () => {
674
+ Promise.reject(expect(Promise.resolve(2)).resolves.not.toBeDefined());
675
+ });
676
+ `,
677
+ errors: [{
678
+ line: 2,
679
+ column: 3,
680
+ endColumn: 72,
681
+ messageId: 'promisesWithAsyncAssertionsMustBeAwaited',
682
+ data: {
683
+ orReturned: ' or returned'
684
+ }
685
+ }]
686
+ }, {
687
+ code: (0, _dedent.default)`
688
+ test("valid-expect", () => {
689
+ Promise.x(expect(Promise.resolve(2)).resolves.not.toBeDefined());
690
+ });
691
+ `,
692
+ errors: [{
693
+ line: 2,
694
+ column: 3,
695
+ endColumn: 67,
696
+ messageId: 'promisesWithAsyncAssertionsMustBeAwaited',
697
+ data: {
698
+ orReturned: ' or returned'
699
+ }
700
+ }]
701
+ },
702
+ // alwaysAwait option changes error message
703
+ {
704
+ code: (0, _dedent.default)`
705
+ test("valid-expect", () => {
706
+ Promise.resolve(expect(Promise.resolve(2)).resolves.not.toBeDefined());
707
+ });
708
+ `,
709
+ options: [{
710
+ alwaysAwait: true
711
+ }],
712
+ errors: [{
713
+ line: 2,
714
+ column: 3,
715
+ endColumn: 73,
716
+ messageId: 'promisesWithAsyncAssertionsMustBeAwaited'
717
+ }]
718
+ },
719
+ // Promise method accepts arrays and returns 1 error
720
+ {
721
+ code: (0, _dedent.default)`
722
+ test("valid-expect", () => {
723
+ Promise.all([
724
+ expect(Promise.resolve(2)).resolves.not.toBeDefined(),
725
+ expect(Promise.resolve(3)).resolves.not.toBeDefined(),
726
+ ]);
727
+ });
728
+ `,
729
+ errors: [{
730
+ line: 2,
731
+ column: 3,
732
+ endLine: 5,
733
+ endColumn: 5,
734
+ messageId: 'promisesWithAsyncAssertionsMustBeAwaited',
735
+ data: {
736
+ orReturned: ' or returned'
737
+ }
738
+ }]
739
+ },
740
+ // Promise.any([expect1, expect2]) returns one error
741
+ {
742
+ code: (0, _dedent.default)`
743
+ test("valid-expect", () => {
744
+ Promise.x([
745
+ expect(Promise.resolve(2)).resolves.not.toBeDefined(),
746
+ expect(Promise.resolve(3)).resolves.not.toBeDefined(),
747
+ ]);
748
+ });
749
+ `,
750
+ errors: [{
751
+ line: 2,
752
+ column: 3,
753
+ endLine: 5,
754
+ endColumn: 5,
755
+ messageId: 'promisesWithAsyncAssertionsMustBeAwaited',
756
+ data: {
757
+ orReturned: ' or returned'
758
+ }
759
+ }]
760
+ },
761
+ //
762
+ {
763
+ code: (0, _dedent.default)`
764
+ test("valid-expect", () => {
765
+ const assertions = [
766
+ expect(Promise.resolve(2)).resolves.not.toBeDefined(),
767
+ expect(Promise.resolve(3)).resolves.not.toBeDefined(),
768
+ ]
769
+ });
770
+ `,
771
+ errors: [{
772
+ line: 3,
773
+ column: 5,
774
+ endLine: 3,
775
+ endColumn: 58,
776
+ messageId: 'asyncMustBeAwaited',
777
+ data: {
778
+ orReturned: ' or returned'
779
+ }
780
+ }, {
781
+ line: 4,
782
+ column: 5,
783
+ endLine: 4,
784
+ endColumn: 58,
785
+ messageId: 'asyncMustBeAwaited',
786
+ data: {
787
+ orReturned: ' or returned'
788
+ }
789
+ }]
790
+ }, {
791
+ code: (0, _dedent.default)`
792
+ test("valid-expect", () => {
793
+ const assertions = [
794
+ expect(Promise.resolve(2)).toResolve(),
795
+ expect(Promise.resolve(3)).toReject(),
796
+ ]
797
+ });
798
+ `,
799
+ errors: [{
800
+ messageId: 'asyncMustBeAwaited',
801
+ data: {
802
+ orReturned: ' or returned'
803
+ },
804
+ column: 5,
805
+ line: 3
806
+ }, {
807
+ messageId: 'asyncMustBeAwaited',
808
+ data: {
809
+ orReturned: ' or returned'
810
+ },
811
+ column: 5,
812
+ line: 4
813
+ }]
814
+ }, {
815
+ code: (0, _dedent.default)`
816
+ test("valid-expect", () => {
817
+ const assertions = [
818
+ expect(Promise.resolve(2)).not.toResolve(),
819
+ expect(Promise.resolve(3)).resolves.toReject(),
820
+ ]
821
+ });
822
+ `,
823
+ errors: [{
824
+ messageId: 'asyncMustBeAwaited',
825
+ data: {
826
+ orReturned: ' or returned'
827
+ },
828
+ column: 5,
829
+ line: 3
830
+ }, {
831
+ messageId: 'asyncMustBeAwaited',
832
+ data: {
833
+ orReturned: ' or returned'
834
+ },
835
+ column: 5,
836
+ line: 4
837
+ }]
838
+ }, {
839
+ code: 'expect(Promise.resolve(2)).resolves.toBe;',
840
+ errors: [{
841
+ column: 37,
842
+ endColumn: 41,
843
+ messageId: 'matcherNotCalled'
844
+ }]
845
+ }, {
846
+ code: (0, _dedent.default)`
847
+ test("valid-expect", () => {
848
+ return expect(functionReturningAPromise()).resolves.toEqual(1).then(() => {
849
+ expect(Promise.resolve(2)).resolves.toBe(1);
850
+ });
851
+ });
852
+ `,
853
+ errors: [{
854
+ line: 3,
855
+ column: 5,
856
+ endLine: 3,
857
+ endColumn: 48,
858
+ messageId: 'asyncMustBeAwaited',
859
+ data: {
860
+ orReturned: ' or returned'
861
+ }
862
+ }]
863
+ }, {
864
+ code: (0, _dedent.default)`
865
+ test("valid-expect", () => {
866
+ return expect(functionReturningAPromise()).resolves.toEqual(1).then(async () => {
867
+ await expect(Promise.resolve(2)).resolves.toBe(1);
868
+ expect(Promise.resolve(4)).resolves.toBe(4);
869
+ });
870
+ });
871
+ `,
872
+ errors: [{
873
+ line: 4,
874
+ column: 5,
875
+ endLine: 4,
876
+ endColumn: 48,
877
+ messageId: 'asyncMustBeAwaited',
878
+ data: {
879
+ orReturned: ' or returned'
880
+ }
881
+ }]
882
+ }, {
883
+ code: (0, _dedent.default)`
884
+ test("valid-expect", async () => {
885
+ await expect(Promise.resolve(1));
886
+ });
887
+ `,
888
+ errors: [{
889
+ endColumn: 35,
890
+ column: 9,
891
+ messageId: 'matcherNotFound'
892
+ }]
893
+ }]
894
+ });