From b3c970c064f5293935a24e904a417f59330001fd Mon Sep 17 00:00:00 2001 From: Romaric Pascal Date: Fri, 22 Sep 2023 11:48:02 +0100 Subject: [PATCH] Fix identifiers of ElementErrors being thrown --- .../src/govuk/components/header/header.mjs | 18 +++++++-------- .../header/header.puppeteer.test.js | 22 +++++++++++++++++-- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/packages/govuk-frontend/src/govuk/components/header/header.mjs b/packages/govuk-frontend/src/govuk/components/header/header.mjs index 73425e7cbd..06740ad5a7 100644 --- a/packages/govuk-frontend/src/govuk/components/header/header.mjs +++ b/packages/govuk-frontend/src/govuk/components/header/header.mjs @@ -61,28 +61,28 @@ export class Header extends GOVUKFrontendComponent { return this } + if (!($menuButton instanceof HTMLElement)) { + throw new ElementError($menuButton, { + componentName: 'Header', + identifier: '.govuk-js-header-toggle' + }) + } + const menuId = $menuButton.getAttribute('aria-controls') if (!menuId) { throw new ElementError($menuButton, { componentName: 'Header', - identifier: '$menuButton["aria-controls"]', + identifier: '.govuk-js-header-toggle[aria-controls]', expectedType: 'string' }) } const $menu = document.getElementById(menuId) - if (!($menuButton instanceof HTMLElement)) { - throw new ElementError($menu, { - componentName: 'Header', - identifier: 'Menu' - }) - } - if (!($menu instanceof HTMLElement)) { throw new ElementError($menu, { componentName: 'Header', - identifier: 'Menu' + identifier: `#${menuId}` }) } diff --git a/packages/govuk-frontend/src/govuk/components/header/header.puppeteer.test.js b/packages/govuk-frontend/src/govuk/components/header/header.puppeteer.test.js index 1b199e9e70..e7e6ca068f 100644 --- a/packages/govuk-frontend/src/govuk/components/header/header.puppeteer.test.js +++ b/packages/govuk-frontend/src/govuk/components/header/header.puppeteer.test.js @@ -230,6 +230,24 @@ describe('Header navigation', () => { }) }) + it('throws when the toggle is of the wrong type', async () => { + await expect( + renderAndInitialise(page, 'header', { + params: examples['with navigation'], + beforeInitialisation($module) { + // Replace with an `` element which is not an `HTMLElement` in the DOM (but an `SVGElement`) + $module.querySelector( + '.govuk-js-header-toggle' + ).outerHTML = `` + } + }) + ).rejects.toEqual({ + name: 'ElementError', + message: + 'Header: .govuk-js-header-toggle is not an instance of "HTMLElement"' + }) + }) + it("throws when the toggle's aria-control attribute is missing", async () => { await expect( renderAndInitialise(page, 'header', { @@ -243,7 +261,7 @@ describe('Header navigation', () => { ).rejects.toEqual({ name: 'ElementError', message: - 'Header: $menuButton["aria-controls"] is not of type "string"' + 'Header: .govuk-js-header-toggle[aria-controls] is not of type "string"' }) }) @@ -258,7 +276,7 @@ describe('Header navigation', () => { }) ).rejects.toEqual({ name: 'ElementError', - message: 'Header: Menu not found' + message: 'Header: #navigation not found' }) }) })