diff --git a/.eslintrc.js b/.eslintrc.js index 35e98799ec7c5..87a98f5429d10 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -320,6 +320,11 @@ module.exports = { excludedFiles: [ 'test/e2e/**/*.js' ], extends: [ 'plugin:@wordpress/eslint-plugin/test-unit' ], }, + { + files: [ '**/test/**/*.js' ], + excludedFiles: [ '**/*.@(android|ios|native).js' ], + extends: [ 'plugin:jest-dom/recommended' ], + }, { files: [ 'packages/e2e-test*/**/*.js' ], excludedFiles: [ 'packages/e2e-test-utils-playwright/**/*.js' ], diff --git a/package-lock.json b/package-lock.json index 43701791134cd..189b4392c6529 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33453,6 +33453,28 @@ "@typescript-eslint/experimental-utils": "^5.0.0" } }, + "eslint-plugin-jest-dom": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-4.0.2.tgz", + "integrity": "sha512-Jo51Atwyo2TdcUncjmU+UQeSTKh3sc2LF/M5i/R3nTU0Djw9V65KGJisdm/RtuKhy2KH/r7eQ1n6kwYFPNdHlA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.16.3", + "@testing-library/dom": "^8.11.1", + "requireindex": "^1.2.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, "eslint-plugin-jsdoc": { "version": "37.0.3", "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.0.3.tgz", diff --git a/package.json b/package.json index c2dea5555d170..e488f504b5836 100755 --- a/package.json +++ b/package.json @@ -185,6 +185,7 @@ "eslint-import-resolver-node": "0.3.4", "eslint-plugin-eslint-comments": "3.1.2", "eslint-plugin-import": "2.25.2", + "eslint-plugin-jest-dom": "4.0.2", "eslint-plugin-playwright": "0.8.0", "eslint-plugin-ssr-friendly": "1.0.6", "execa": "4.0.2", diff --git a/packages/components/src/ui/tooltip/test/index.js b/packages/components/src/ui/tooltip/test/index.js index 9251fd476ba99..0a13319b99925 100644 --- a/packages/components/src/ui/tooltip/test/index.js +++ b/packages/components/src/ui/tooltip/test/index.js @@ -37,14 +37,14 @@ describe( 'props', () => { { invisibleTooltipTriggerContent } ); - const tooltips = screen.getAllByRole( /tooltip/i ); + const tooltip = screen.getByRole( /tooltip/i ); const invisibleTooltipTrigger = screen.getByText( invisibleTooltipTriggerContent ); - // The invisible tooltip should not render. - expect( tooltips ).toHaveLength( 1 ); + // The base tooltip should render only; invisible tooltip should not render. + expect( tooltip ).toBeInTheDocument(); // Assert that the rendered tooltip is indeed the base tooltip. - expect( tooltips[ 0 ].id ).toBe( baseTooltipId ); + expect( tooltip.id ).toBe( baseTooltipId ); // But the invisible tooltip's trigger still should have rendered. expect( invisibleTooltipTrigger ).not.toBeUndefined(); } ); @@ -70,9 +70,9 @@ describe( 'props', () => { WordPress.org ); - const tooltips = screen.getAllByRole( /tooltip/i ); + const tooltip = screen.getByRole( /tooltip/i ); // Assert only the base tooltip rendered. - expect( tooltips ).toHaveLength( 1 ); - expect( tooltips[ 0 ].id ).toBe( baseTooltipId ); + expect( tooltip ).toBeInTheDocument(); + expect( tooltip.id ).toBe( baseTooltipId ); } ); } );