From bcb70e7e66d4fcb8ea7e36e23f7fa294f8959612 Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Wed, 5 Aug 2020 07:54:14 -0700 Subject: [PATCH] fix(prefer-empty): don't report on non empty template strings in to-be-empty --- package.json | 3 ++- src/__tests__/lib/rules/prefer-empty.js | 23 ++++++++++++++++++++++- src/rules/prefer-empty.js | 12 ++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index ee78027..7dca7af 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,8 @@ "eslintConfig": { "extends": "./node_modules/kcd-scripts/eslint.js", "rules": { - "babel/quotes": "off" + "babel/quotes": "off", + "max-lines-per-function": "off" } }, "eslintIgnore": [ diff --git a/src/__tests__/lib/rules/prefer-empty.js b/src/__tests__/lib/rules/prefer-empty.js index 1fb1b44..bb122d1 100644 --- a/src/__tests__/lib/rules/prefer-empty.js +++ b/src/__tests__/lib/rules/prefer-empty.js @@ -1,3 +1,4 @@ +/* eslint-disable no-template-curly-in-string */ /** * @fileoverview Prefer toBeEmptyDOMElement over checking innerHTML * @author Ben Monro @@ -14,13 +15,15 @@ import * as rule from "../../../rules/prefer-empty"; // Tests //------------------------------------------------------------------------------ -const ruleTester = new RuleTester(); +const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015 } }); ruleTester.run("prefer-empty", rule, { valid: [ `expect(element.innerHTML).toBe('foo')`, `expect(element.innerHTML).toBe(foo)`, `expect(element.innerHTML).not.toBe('foo')`, `expect(element.innerHTML).not.toBe(foo)`, + "expect(statusText.innerHTML).toBe(`${value}%`)", + "expect(statusText.innerHTML).not.toBe(`${value}%`)", `expect(element.firstChild).toBe('foo')`, `expect(element.firstChild).not.toBe('foo')`, `expect(getByText("foo").innerHTML).toBe('foo')`, @@ -104,6 +107,15 @@ ruleTester.run("prefer-empty", rule, { ], output: `expect(element).toBeEmptyDOMElement()`, }, + { + code: "expect(element.innerHTML).toBe(``)", + errors: [ + { + message: "Use toBeEmptyDOMElement instead of checking inner html.", + }, + ], + output: `expect(element).toBeEmptyDOMElement()`, + }, { code: `expect(element.innerHTML).toBe(null)`, @@ -133,6 +145,15 @@ ruleTester.run("prefer-empty", rule, { ], output: `expect(element).not.toBeEmptyDOMElement()`, }, + { + code: "expect(element.innerHTML).not.toBe(``)", + errors: [ + { + message: "Use toBeEmptyDOMElement instead of checking inner html.", + }, + ], + output: `expect(element).not.toBeEmptyDOMElement()`, + }, { code: `expect(element.firstChild).toBeNull()`, diff --git a/src/rules/prefer-empty.js b/src/rules/prefer-empty.js index 6df08e3..dec1eab 100644 --- a/src/rules/prefer-empty.js +++ b/src/rules/prefer-empty.js @@ -56,7 +56,11 @@ export const create = (context) => ({ node ) { const args = node.parent.parent.parent.arguments[0]; - if (args.value || args.name) { + if ( + args.value || + args.name || + (args.expressions && args.expressions.length) + ) { return; } @@ -74,7 +78,11 @@ export const create = (context) => ({ node ) { const args = node.parent.parent.parent.parent.arguments[0]; - if (args.value || args.name) { + if ( + args.value || + args.name || + (args.expressions && args.expressions.length) + ) { return; }