From 819c667fadc533fbf68c2d9a307d5ebc15bdea6e Mon Sep 17 00:00:00 2001 From: Michael Taranto Date: Fri, 20 Sep 2024 09:16:30 +1000 Subject: [PATCH] BraidTestProvider: Provide `scrollIntoView` stub function for jsdom (#1590) --- .changeset/bright-squids-ring.md | 15 +++++++++++++++ jest/setupTests.ts | 3 --- .../BraidTestProvider/BraidTestProvider.tsx | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 .changeset/bright-squids-ring.md diff --git a/.changeset/bright-squids-ring.md b/.changeset/bright-squids-ring.md new file mode 100644 index 00000000000..a1e5b0f2431 --- /dev/null +++ b/.changeset/bright-squids-ring.md @@ -0,0 +1,15 @@ +--- +'braid-design-system': patch +--- + +--- +updated: + - BraidTestProvider +--- + +**BraidTestProvider:** Provide `scrollIntoView` stub function for jsdom + +Fixes an issue where `scrollIntoView` is not defined in jsdom, causing tests to fail with the following error: +``` +Error: Uncaught [TypeError: highlightedItem?.scrollIntoView is not a function] +``` diff --git a/jest/setupTests.ts b/jest/setupTests.ts index 7f848aaec4f..2c282c52ca1 100644 --- a/jest/setupTests.ts +++ b/jest/setupTests.ts @@ -6,9 +6,6 @@ import { format, TextEncoder, TextDecoder } from 'util'; global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder; -// Mocking for `jsdom` -window.HTMLElement.prototype.scrollIntoView = function () {}; - const error = global.console.error; globalThis.IS_REACT_ACT_ENVIRONMENT = true; diff --git a/packages/braid-design-system/src/lib/components/BraidTestProvider/BraidTestProvider.tsx b/packages/braid-design-system/src/lib/components/BraidTestProvider/BraidTestProvider.tsx index ed23d4e330e..2563bdfb5a5 100644 --- a/packages/braid-design-system/src/lib/components/BraidTestProvider/BraidTestProvider.tsx +++ b/packages/braid-design-system/src/lib/components/BraidTestProvider/BraidTestProvider.tsx @@ -8,6 +8,21 @@ import { import { BraidTestProviderContext } from './BraidTestProviderContext'; import { breakpointContext } from '../BraidProvider/BreakpointContext'; +/** + * Mocking for `jsdom` which doesn't support `scrollIntoView`. + * Can remove this if/when `jsdom` adds a stub for `scrollIntoView`. + * + * GitHub issue: https://github.com/jsdom/jsdom/issues/1695 + * Pull request: https://github.com/jsdom/jsdom/pull/3639 + */ +if ( + typeof navigator !== 'undefined' && + navigator?.userAgent?.includes('jsdom') +) { + window.HTMLElement.prototype.scrollIntoView = + window.HTMLElement.prototype.scrollIntoView || (() => {}); +} + interface BraidTestProviderProps extends Omit { themeName?: keyof typeof themes;