Skip to content

Commit b4b7cbc

Browse files
authored
fix(max-expects): properly reset counter when exiting a test case (#1550)
1 parent 6aaabc4 commit b4b7cbc

File tree

2 files changed

+233
-0
lines changed

2 files changed

+233
-0
lines changed

src/rules/__tests__/max-expects.test.ts

+229
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,39 @@ ruleTester.run('max-expects', rule, {
119119
expect(true).toBeDefined();
120120
});
121121
`,
122+
dedent`
123+
test('should not pass', () => {
124+
const checkValue = (value) => {
125+
expect(value).toBeDefined();
126+
expect(value).toBeDefined();
127+
};
128+
129+
checkValue(true);
130+
});
131+
test('should not pass', () => {
132+
expect(true).toBeDefined();
133+
expect(true).toBeDefined();
134+
expect(true).toBeDefined();
135+
});
136+
`,
137+
dedent`
138+
test('should not pass', done => {
139+
emitter.on('event', value => {
140+
expect(value).toBeDefined();
141+
expect(value).toBeDefined();
142+
expect(value).toBeDefined();
143+
expect(value).toBeDefined();
144+
145+
done();
146+
});
147+
});
148+
test('should not pass', () => {
149+
expect(true).toBeDefined();
150+
expect(true).toBeDefined();
151+
expect(true).toBeDefined();
152+
expect(true).toBeDefined();
153+
});
154+
`,
122155
dedent`
123156
function myHelper() {
124157
expect(true).toBeDefined();
@@ -204,6 +237,24 @@ ruleTester.run('max-expects', rule, {
204237
},
205238
],
206239
},
240+
{
241+
code: dedent`
242+
describe('given decimal places', () => {
243+
it("test 1", fakeAsync(() => {
244+
expect(true).toBeTrue();
245+
expect(true).toBeTrue();
246+
expect(true).toBeTrue();
247+
}))
248+
249+
it("test 2", fakeAsync(() => {
250+
expect(true).toBeTrue();
251+
expect(true).toBeTrue();
252+
expect(true).toBeTrue();
253+
}))
254+
})
255+
`,
256+
options: [{ max: 5 }],
257+
},
207258
],
208259
invalid: [
209260
{
@@ -314,6 +365,184 @@ ruleTester.run('max-expects', rule, {
314365
},
315366
],
316367
},
368+
{
369+
code: dedent`
370+
test('should not pass', () => {
371+
const checkValue = (value) => {
372+
expect(value).toBeDefined();
373+
expect(value).toBeDefined();
374+
};
375+
376+
checkValue(true);
377+
});
378+
test('should not pass', () => {
379+
expect(true).toBeDefined();
380+
expect(true).toBeDefined();
381+
expect(true).toBeDefined();
382+
});
383+
`,
384+
options: [{ max: 1 }],
385+
errors: [
386+
{
387+
messageId: 'exceededMaxAssertion',
388+
line: 4,
389+
column: 5,
390+
},
391+
{
392+
messageId: 'exceededMaxAssertion',
393+
line: 11,
394+
column: 3,
395+
},
396+
{
397+
messageId: 'exceededMaxAssertion',
398+
line: 12,
399+
column: 3,
400+
},
401+
],
402+
},
403+
{
404+
code: dedent`
405+
test('should not pass', () => {
406+
const checkValue = (value) => {
407+
expect(value).toBeDefined();
408+
expect(value).toBeDefined();
409+
};
410+
411+
checkValue(true);
412+
});
413+
test('should not pass', () => {
414+
expect(true).toBeDefined();
415+
expect(true).toBeDefined();
416+
expect(true).toBeDefined();
417+
});
418+
`,
419+
options: [{ max: 2 }],
420+
errors: [
421+
{
422+
messageId: 'exceededMaxAssertion',
423+
line: 12,
424+
column: 3,
425+
},
426+
],
427+
},
428+
{
429+
code: dedent`
430+
test('should not pass', () => {
431+
const checkValue = (value) => {
432+
expect(value).toBeDefined();
433+
expect(value).toBeDefined();
434+
};
435+
436+
expect(value).toBeDefined();
437+
checkValue(true);
438+
});
439+
test('should not pass', () => {
440+
expect(true).toBeDefined();
441+
expect(true).toBeDefined();
442+
expect(true).toBeDefined();
443+
});
444+
`,
445+
options: [{ max: 2 }],
446+
errors: [
447+
{
448+
messageId: 'exceededMaxAssertion',
449+
line: 13,
450+
column: 3,
451+
},
452+
],
453+
},
454+
{
455+
code: dedent`
456+
test('should not pass', done => {
457+
emitter.on('event', value => {
458+
expect(value).toBeDefined();
459+
expect(value).toBeDefined();
460+
461+
done();
462+
});
463+
});
464+
test('should not pass', () => {
465+
expect(true).toBeDefined();
466+
expect(true).toBeDefined();
467+
expect(true).toBeDefined();
468+
});
469+
`,
470+
options: [{ max: 1 }],
471+
errors: [
472+
{
473+
messageId: 'exceededMaxAssertion',
474+
line: 4,
475+
column: 5,
476+
},
477+
{
478+
messageId: 'exceededMaxAssertion',
479+
line: 11,
480+
column: 3,
481+
},
482+
{
483+
messageId: 'exceededMaxAssertion',
484+
line: 12,
485+
column: 3,
486+
},
487+
],
488+
},
489+
{
490+
code: dedent`
491+
test('should not pass', done => {
492+
emitter.on('event', value => {
493+
expect(value).toBeDefined();
494+
expect(value).toBeDefined();
495+
496+
done();
497+
});
498+
});
499+
test('should not pass', () => {
500+
expect(true).toBeDefined();
501+
expect(true).toBeDefined();
502+
expect(true).toBeDefined();
503+
});
504+
`,
505+
options: [{ max: 2 }],
506+
errors: [
507+
{
508+
messageId: 'exceededMaxAssertion',
509+
line: 12,
510+
column: 3,
511+
},
512+
],
513+
},
514+
{
515+
code: dedent`
516+
describe('given decimal places', () => {
517+
it("test 1", fakeAsync(() => {
518+
expect(true).toBeTrue();
519+
expect(true).toBeTrue();
520+
expect(true).toBeTrue();
521+
}))
522+
523+
it("test 2", fakeAsync(() => {
524+
expect(true).toBeTrue();
525+
expect(true).toBeTrue();
526+
expect(true).toBeTrue();
527+
expect(true).toBeTrue();
528+
expect(true).toBeTrue();
529+
}))
530+
})
531+
`,
532+
options: [{ max: 3 }],
533+
errors: [
534+
{
535+
messageId: 'exceededMaxAssertion',
536+
line: 12,
537+
column: 5,
538+
},
539+
{
540+
messageId: 'exceededMaxAssertion',
541+
line: 13,
542+
column: 5,
543+
},
544+
],
545+
},
317546
{
318547
code: dedent`
319548
describe('test', () => {

src/rules/max-expects.ts

+4
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ export default createRule({
5252
CallExpression(node) {
5353
const jestFnCall = parseJestFnCall(node, context);
5454

55+
if (jestFnCall?.type === 'test') {
56+
count = 0;
57+
}
58+
5559
if (
5660
jestFnCall?.type !== 'expect' ||
5761
jestFnCall.head.node.parent?.type === AST_NODE_TYPES.MemberExpression

0 commit comments

Comments
 (0)