From 9af968ff47a8f7fdde678d9d11297d400c0fe568 Mon Sep 17 00:00:00 2001 From: Azat S Date: Sun, 13 Aug 2023 21:59:18 +0300 Subject: [PATCH 1/3] feat(rule-tester): allow to create empty tests --- packages/rule-tester/src/RuleTester.ts | 48 ++++++++++++++------------ 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/packages/rule-tester/src/RuleTester.ts b/packages/rule-tester/src/RuleTester.ts index cc6577611378..198309699af9 100644 --- a/packages/rule-tester/src/RuleTester.ts +++ b/packages/rule-tester/src/RuleTester.ts @@ -395,33 +395,37 @@ export class RuleTester extends TestFramework { * one of the templates above. */ constructor.describe(ruleName, () => { - constructor.describe('valid', () => { - normalizedTests.valid.forEach(valid => { - const testName = ((): string => { - if (valid.name == null || valid.name.length === 0) { - return valid.code; - } - return valid.name; - })(); - constructor[getTestMethod(valid)](sanitize(testName), () => { - this.#testValidTemplate(ruleName, rule, valid); + if (normalizedTests.valid.length) { + constructor.describe('valid', () => { + normalizedTests.valid.forEach(valid => { + const testName = ((): string => { + if (valid.name == null || valid.name.length === 0) { + return valid.code; + } + return valid.name; + })(); + constructor[getTestMethod(valid)](sanitize(testName), () => { + this.#testValidTemplate(ruleName, rule, valid); + }); }); }); - }); + } - constructor.describe('invalid', () => { - normalizedTests.invalid.forEach(invalid => { - const name = ((): string => { - if (invalid.name == null || invalid.name.length === 0) { - return invalid.code; - } - return invalid.name; - })(); - constructor[getTestMethod(invalid)](sanitize(name), () => { - this.#testInvalidTemplate(ruleName, rule, invalid); + if (normalizedTests.invalid.length) { + constructor.describe('invalid', () => { + normalizedTests.invalid.forEach(invalid => { + const name = ((): string => { + if (invalid.name == null || invalid.name.length === 0) { + return invalid.code; + } + return invalid.name; + })(); + constructor[getTestMethod(invalid)](sanitize(name), () => { + this.#testInvalidTemplate(ruleName, rule, invalid); + }); }); }); - }); + } }); } From 2f683f8d17230079e62abf28e820622951213d80 Mon Sep 17 00:00:00 2001 From: "Azat S." Date: Mon, 4 Sep 2023 00:55:38 +0300 Subject: [PATCH 2/3] feat(rule-tester): add tests with empty valid and invalid suites --- packages/rule-tester/tests/RuleTester.test.ts | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/packages/rule-tester/tests/RuleTester.test.ts b/packages/rule-tester/tests/RuleTester.test.ts index 25b6aa0888ed..47579cdd69d8 100644 --- a/packages/rule-tester/tests/RuleTester.test.ts +++ b/packages/rule-tester/tests/RuleTester.test.ts @@ -819,6 +819,37 @@ describe('RuleTester', () => { expect(mockedDescribeSkip.mock.calls).toHaveLength(0); // expect(mockedIt.mock.lastCall).toMatchInlineSnapshot(`undefined`); }); + + it('does not call describe with valid if no valid tests are provided', () => { + const ruleTester = new RuleTester(); + + ruleTester.run('my-rule', NOOP_RULE, { + valid: [], + invalid: [ + { + code: 'invalid', + errors: [{ messageId: 'error' }], + }, + ], + }); + + expect(mockedDescribe.mock.calls).toHaveLength(2); + }); + + it('does not call describe with invalid if no invalid tests are provided', () => { + const ruleTester = new RuleTester(); + + ruleTester.run('my-rule', NOOP_RULE, { + valid: [ + { + code: 'valid', + }, + ], + invalid: [], + }); + + expect(mockedDescribe.mock.calls).toHaveLength(2); + }); }); }); }); From 50adaa0267600cf387c1351ed41ee97eb09e0ccc Mon Sep 17 00:00:00 2001 From: "Azat S." Date: Mon, 4 Sep 2023 01:07:02 +0300 Subject: [PATCH 3/3] fix(rule-tester): improve tests with empty rule tester suites --- packages/rule-tester/tests/RuleTester.test.ts | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/rule-tester/tests/RuleTester.test.ts b/packages/rule-tester/tests/RuleTester.test.ts index 47579cdd69d8..07ad0f31f8ab 100644 --- a/packages/rule-tester/tests/RuleTester.test.ts +++ b/packages/rule-tester/tests/RuleTester.test.ts @@ -833,7 +833,18 @@ describe('RuleTester', () => { ], }); - expect(mockedDescribe.mock.calls).toHaveLength(2); + expect(mockedDescribe.mock.calls).toMatchInlineSnapshot(` + [ + [ + "my-rule", + [Function], + ], + [ + "invalid", + [Function], + ], + ] + `); }); it('does not call describe with invalid if no invalid tests are provided', () => { @@ -848,7 +859,18 @@ describe('RuleTester', () => { invalid: [], }); - expect(mockedDescribe.mock.calls).toHaveLength(2); + expect(mockedDescribe.mock.calls).toMatchInlineSnapshot(` + [ + [ + "my-rule", + [Function], + ], + [ + "valid", + [Function], + ], + ] + `); }); }); });