diff --git a/lib/rules/no-empty-description.js b/lib/rules/no-empty-description.js index d40932b..320f270 100644 --- a/lib/rules/no-empty-description.js +++ b/lib/rules/no-empty-description.js @@ -1,6 +1,6 @@ 'use strict'; -const { getStringIfConstant } = require('eslint-utils'); +const { getStringIfConstant, getStaticValue } = require('eslint-utils'); const DEFAULT_TEST_NAMES = [ 'describe', 'context', 'suite', 'it', 'test', 'specify' ]; const ERROR_MESSAGE = 'Unexpected empty test description.'; @@ -55,14 +55,22 @@ module.exports = { return [ 'TaggedTemplateExpression', 'TemplateLiteral' ].includes(node && node.type); } + function isIdentifier(node) { + return node && node.type === 'Identifier'; + } + function checkDescription(mochaCallExpression) { const description = mochaCallExpression.arguments[0]; - const text = getStringIfConstant(description); + const text = getStringIfConstant(description, context.getScope()); if (isTemplateString(description) && text === null) { return true; } + if (isIdentifier(description) && text === null) { + return true; + } + return text && text.trim().length; } diff --git a/test/rules/no-empty-description.js b/test/rules/no-empty-description.js index 3faa7b1..a6d979a 100644 --- a/test/rules/no-empty-description.js +++ b/test/rules/no-empty-description.js @@ -29,6 +29,9 @@ ruleTester.run('no-empty-description', rules['no-empty-description'], { 'test.only("some text")', 'test("some text", function() { })', + 'var dynamicTitle = "foo"; it(dynamicTitle, function() {});', + 'it(dynamicTitle, function() {});', + 'notTest()', { @@ -46,6 +49,10 @@ ruleTester.run('no-empty-description', rules['no-empty-description'], { { options: [ { testNames: [ 'someFunction' ] } ], code: 'someFunction("this is a test", function () { });' + }, + { + parserOptions: { ecmaVersion: 2019 }, + code: 'const dynamicTitle = "foo"; it(dynamicTitle, function() {});' } ], @@ -76,6 +83,11 @@ ruleTester.run('no-empty-description', rules['no-empty-description'], { parserOptions: { ecmaVersion: 2019 }, code: 'it(` `, function () { });', errors: [ { message: defaultErrorMessage, ...firstLine } ] + }, + { + parserOptions: { ecmaVersion: 2019 }, + code: 'const foo = ""; it(foo);', + errors: [ { message: defaultErrorMessage, line: 1, column: 17 } ] } ]