From d98152a3d8c72e4f5ac4c6fa10a615b12090c8f7 Mon Sep 17 00:00:00 2001 From: Anix Date: Wed, 17 Jun 2020 14:10:41 +0530 Subject: [PATCH] Update: added empty error array check for false negative (#13200) * Update: added empty error array check for false negative * Chore: message refactore * Chore: fixed tests * Update: throw error for errors: 0 in test files * Update: changed error message * Chore: changed assertion message --- lib/rule-tester/rule-tester.js | 9 ++++++++ tests/lib/rule-tester/rule-tester.js | 34 +++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/rule-tester/rule-tester.js b/lib/rule-tester/rule-tester.js index 77df1def893..3e391576716 100644 --- a/lib/rule-tester/rule-tester.js +++ b/lib/rule-tester/rule-tester.js @@ -644,6 +644,10 @@ class RuleTester { assert.ok(item.errors || item.errors === 0, `Did not specify errors for an invalid test of ${ruleName}`); + if (Array.isArray(item.errors) && item.errors.length === 0) { + assert.fail("Invalid cases must have at least one error"); + } + const ruleHasMetaMessages = hasOwnProperty(rule, "meta") && hasOwnProperty(rule.meta, "messages"); const friendlyIDList = ruleHasMetaMessages ? `[${Object.keys(rule.meta.messages).map(key => `'${key}'`).join(", ")}]` : null; @@ -651,6 +655,11 @@ class RuleTester { const messages = result.messages; if (typeof item.errors === "number") { + + if (item.errors === 0) { + assert.fail("Invalid cases must have 'error' value greater than 0"); + } + assert.strictEqual(messages.length, item.errors, util.format("Should have %d error%s but had %d: %s", item.errors, item.errors === 1 ? "" : "s", messages.length, util.inspect(messages))); } else { diff --git a/tests/lib/rule-tester/rule-tester.js b/tests/lib/rule-tester/rule-tester.js index fedc237d64c..7e26e1a826c 100644 --- a/tests/lib/rule-tester/rule-tester.js +++ b/tests/lib/rule-tester/rule-tester.js @@ -463,6 +463,37 @@ describe("RuleTester", () => { }, expectedErrorMessage); }); + it("should throw error for empty error array", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [] + }] + }); + }, /Invalid cases must have at least one error/u); + }); + + it("should throw error for errors : 0", () => { + assert.throws(() => { + ruleTester.run( + "suggestions-messageIds", + require("../../fixtures/testers/rule-tester/suggestions") + .withMessageIds, + { + valid: [], + invalid: [ + { + code: "var foo;", + errors: 0 + } + ] + } + ); + }, /Invalid cases must have 'error' value greater than 0/u); + }); + it("should not skip column assertion if column is a falsy value", () => { assert.throws(() => { ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { @@ -732,7 +763,7 @@ describe("RuleTester", () => { { code: "eval(foo)", parser: require.resolve("esprima"), - errors: [{}] + errors: [{ line: 1 }] } ] }); @@ -1893,4 +1924,5 @@ describe("RuleTester", () => { }); }); + });