diff --git a/src/app-layout/__tests__/main.test.tsx b/src/app-layout/__tests__/main.test.tsx index bd8f218fff..16f0899369 100644 --- a/src/app-layout/__tests__/main.test.tsx +++ b/src/app-layout/__tests__/main.test.tsx @@ -1,6 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import * as React from 'react'; +import { useLayoutEffect } from 'react'; import { waitFor } from '@testing-library/react'; import '../../__a11y__/to-validate-a11y'; @@ -11,6 +12,22 @@ import { describeEachAppLayout, renderComponent, testDrawer } from './utils'; import mobileStyles from '../../../lib/components/app-layout/mobile-toolbar/styles.css.js'; import sharedStyles from '../../../lib/components/app-layout/styles.css.js'; +jest.mock('@cloudscape-design/component-toolkit/internal', () => ({ + ...jest.requireActual('@cloudscape-design/component-toolkit/internal'), + useResizeObserver: (getElement: any, onObserve: any) => { + useLayoutEffect(() => { + if (typeof getElement === 'function') { + const element = getElement(); + if (element) { + // Extract height from inline styles for JSDOM compatibility + const height = parseInt(element.style.height) || 0; + onObserve({ borderBoxHeight: height }); + } + } + }, [getElement, onObserve]); + }, +})); + test('does not render mobile mode by default', () => { const { wrapper } = renderComponent(); expect(wrapper.findByClassName(mobileStyles['mobile-bar'])).toBeFalsy(); diff --git a/src/table/__integ__/resizable-columns-misc.test.ts b/src/table/__integ__/resizable-columns-misc.test.ts index 563e2d9a35..3da66b7017 100644 --- a/src/table/__integ__/resizable-columns-misc.test.ts +++ b/src/table/__integ__/resizable-columns-misc.test.ts @@ -89,11 +89,11 @@ test( await page.installObserver(wrapper.find('table').toSelector()); await page.click('#shrink-container'); await page.waitForJsTimers(); - // expected 1 observation after creating observer and 1 caused by container shrink - await expect(page.getObservations()).resolves.toBe(2); + // check to ensure that we haven't triggered an infinite resize loop + await expect(page.getObservations()).resolves.toBeLessThanOrEqual(3); await page.waitForJsTimers(); - // ensure there are no more observations added after the expected 2 - await expect(page.getObservations()).resolves.toBe(2); + // check again to ensure that we haven't triggered an infinite resize loop + await expect(page.getObservations()).resolves.toBeLessThanOrEqual(3); }) );