Skip to content

Commit 8239fba

Browse files
committed
add ResizeObserver API precense checks
1 parent 31af5a6 commit 8239fba

File tree

6 files changed

+32
-4
lines changed

6 files changed

+32
-4
lines changed

jest/unit-setup.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,3 @@
44
require('@testing-library/jest-dom');
55
const { cleanup } = require('@testing-library/react');
66
afterEach(cleanup);
7-
8-
// Import ResizeObserver and getBoundingClientRect mocks
9-
require('./resize-observer-mock');
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
import React from 'react';
5+
import { render } from '@testing-library/react';
6+
import { ContainerQueryEntry } from '../interfaces';
7+
import useContainerQuery from '../use-container-query';
8+
9+
function TestComponent({ mapFn = () => '' }: { mapFn?: (entry: ContainerQueryEntry) => string }) {
10+
const [value, ref] = useContainerQuery(mapFn);
11+
return <div ref={ref} data-testid="test" data-value={value} />;
12+
}
13+
14+
test('should work in JSDOM environment without any mocks', () => {
15+
// making sure this API does not exist
16+
expect(typeof ResizeObserver).toBe('undefined');
17+
const mapFn = jest.fn(() => '');
18+
const component = render(<TestComponent mapFn={mapFn} />);
19+
expect(mapFn).toHaveBeenCalledWith(
20+
{
21+
target: component.getByTestId('test'),
22+
contentBoxWidth: 0,
23+
contentBoxHeight: 0,
24+
borderBoxWidth: 0,
25+
borderBoxHeight: 0,
26+
},
27+
null
28+
);
29+
});

src/container-queries/__tests__/use-container-query.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import React from 'react';
55
import { render } from '@testing-library/react';
66
import useContainerQuery from '../use-container-query';
77
import { ContainerQueryEntry } from '../interfaces';
8+
import '../../internal/container-queries/__tests__/resize-observer-mock';
89

910
function TestComponent({ mapFn = () => '' }: { mapFn?: (entry: ContainerQueryEntry) => string }) {
1011
const [value, ref] = useContainerQuery(mapFn);

jest/resize-observer-mock.js renamed to src/internal/container-queries/__tests__/resize-observer-mock.ts

File renamed without changes.

src/internal/container-queries/__tests__/use-resize-observer.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import React, { useState, useRef } from 'react';
55
import { render } from '@testing-library/react';
66
import { useResizeObserver } from '../use-resize-observer';
77
import { ContainerQueryEntry } from '../interfaces';
8+
import './resize-observer-mock';
89

910
function TestComponent({ mapFn = () => '' }: { mapFn?: (entry: ContainerQueryEntry) => string }) {
1011
const ref = useRef<HTMLDivElement>(null);

src/internal/container-queries/use-resize-observer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export function useResizeObserver(elementRef: ElementReference, onObserve: (entr
5252

5353
useEffect(() => {
5454
const element = typeof elementRef === 'function' ? elementRef() : elementRef?.current;
55-
if (element) {
55+
if (element && typeof ResizeObserver !== 'undefined') {
5656
let connected = true;
5757
const observer = new ResizeObserver(entries => {
5858
// Prevent observe notifications on already unmounted component.

0 commit comments

Comments
 (0)