From b7d7682ecb63a96d06aced6214d476295dbecac6 Mon Sep 17 00:00:00 2001 From: mickael Date: Wed, 21 Aug 2019 10:59:44 +0200 Subject: [PATCH 1/3] Add custom message options for valid-suite-description rule --- lib/rules/valid-suite-description.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/rules/valid-suite-description.js b/lib/rules/valid-suite-description.js index a17b179..f702ea3 100644 --- a/lib/rules/valid-suite-description.js +++ b/lib/rules/valid-suite-description.js @@ -8,9 +8,28 @@ const astUtils = require('../util/ast'); const defaultSuiteNames = [ 'describe', 'context', 'suite' ]; -module.exports = function (context) { +function inlineOptions(context) { const pattern = new RegExp(context.options[0]); const suiteNames = context.options[1] ? context.options[1] : defaultSuiteNames; + const message = context.options[2]; + + return { pattern, suiteNames, message }; +} + +function objectOptions(options) { + const pattern = new RegExp(options.pattern); + const suiteNames = options.suiteNames ? options.suiteNames : defaultSuiteNames; + const message = options.message; + + return { pattern, suiteNames, message }; +} + +module.exports = function (context) { + const options = context.options[0]; + + const { pattern, suiteNames, message } = typeof options === 'object' && !(options instanceof RegExp) ? + objectOptions(options) : + inlineOptions(context); function isSuite(node) { return node.callee && node.callee.name && suiteNames.indexOf(node.callee.name) > -1; @@ -40,7 +59,7 @@ module.exports = function (context) { if (isSuite(node)) { if (!hasValidOrNoSuiteDescription(node)) { - context.report(node, `Invalid "${ callee.name }()" description found.`); + context.report(node, message || `Invalid "${ callee.name }()" description found.`); } } } From dc7334c2118d05fa49aaedcd739ae9748d2f0dff Mon Sep 17 00:00:00 2001 From: mickael Date: Wed, 21 Aug 2019 11:00:01 +0200 Subject: [PATCH 2/3] Test addition of custom message for valid-suite-description rule --- test/rules/valid-suite-description.js | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/test/rules/valid-suite-description.js b/test/rules/valid-suite-description.js index d6f5880..5cd7a74 100644 --- a/test/rules/valid-suite-description.js +++ b/test/rules/valid-suite-description.js @@ -26,6 +26,26 @@ ruleTester.run('valid-suite-description', rules['valid-suite-description'], { options: [ '^[A-Z]', [ 'someFunction' ] ], code: 'someFunction("Should do something", function () { });' }, + { + options: [ '^[A-Z]', [ 'someFunction' ], 'some error message' ], + code: 'someFunction("Should do something", function () { });' + }, + { + options: [ /^[A-Z]/, [ 'someFunction' ], 'some error message' ], + code: 'someFunction("Should do something", function () { });' + }, + { + options: [ { pattern: '^[A-Z]', suiteNames: [ 'someFunction' ], message: 'some error message' } ], + code: 'someFunction("Should do something", function () { });' + }, + { + options: [ { pattern: /^[A-Z]/, suiteNames: [ 'someFunction' ], message: 'some error message' } ], + code: 'someFunction("Should do something", function () { });' + }, + { + options: [ {} ], + code: 'someFunction("Should do something", function () { });' + }, 'someOtherFunction();', { parserOptions: { ecmaVersion: 2017 }, @@ -63,6 +83,20 @@ ruleTester.run('valid-suite-description', rules['valid-suite-description'], { errors: [ { message: 'Invalid "customFunction()" description found.' } ] + }, + { + options: [ '^[A-Z]', [ 'customFunction' ], 'some error message' ], + code: 'customFunction("this is a test", function () { });', + errors: [ + { message: 'some error message' } + ] + }, + { + options: [ { pattern: '^[A-Z]', suiteNames: [ 'customFunction' ], message: 'some error message' } ], + code: 'customFunction("this is a test", function () { });', + errors: [ + { message: 'some error message' } + ] } ] }); From 61a4c67dad2bf396ebe9399a57d47977c4f0fe7e Mon Sep 17 00:00:00 2001 From: mickael Date: Wed, 21 Aug 2019 11:00:22 +0200 Subject: [PATCH 3/3] Document addition of custom message for valid-suite-description rule --- docs/rules/valid-suite-description.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/rules/valid-suite-description.md b/docs/rules/valid-suite-description.md index 22c46b3..ace1e70 100644 --- a/docs/rules/valid-suite-description.md +++ b/docs/rules/valid-suite-description.md @@ -1,10 +1,10 @@ # Match suite descriptions against a pre-configured regular expression (valid-suite-description) -This rule enforces the suite descriptions to follow the desired format. +This rule enforces the suite descriptions to follow the desired format. ## Rule Details -By default, the regular expression is not configured and would be required if rule is enabled. +By default, the regular expression is not configured and would be required if rule is enabled. By default, the rule supports "describe", "context" and "suite" suite function names, but it can be configured to look for different suite names via rule configuration. Example of a custom rule configuration: @@ -42,10 +42,14 @@ context("Test suite", function() { }); suite("Test suite", function() { }); ``` -There is also possible to configure a custom list of suite names via the second rule configuration option: +There is also possible to configure a custom list of suite names and a custom error message via the second and third rule configuration option: ```js rules: { - "mocha/valid-suite-description": ["warn", "^[A-Z]", ["describe", "context", "suite", "mysuitename"]] + "mocha/valid-suite-description": ["warn", "^[A-Z]", ["describe", "context", "suite", "mysuitename"], "custom error message"] +}, +// OR +rules: { + "mocha/valid-suite-description": ["warn", { pattern: "^[A-Z]", suiteNames: ["describe", "context", "suite", "mysuitename"], message: "custom error message" }] }, ```