diff --git a/codemods/v14-update-deps/README.md b/codemods/v14-update-deps/README.md index 133cb32b6..61677e5f6 100644 --- a/codemods/v14-update-deps/README.md +++ b/codemods/v14-update-deps/README.md @@ -7,7 +7,7 @@ This codemod automatically updates your `package.json` to prepare for React Nati - Removes `@types/react-test-renderer` and `react-test-renderer` (no longer needed) - Moves `@testing-library/react-native` to `devDependencies` if it's in `dependencies` - Updates `@testing-library/react-native` to `^14.0.0-beta.0` -- Adds `test-renderer@0.14.0` to `devDependencies` +- Adds `test-renderer@0.16.0` to `devDependencies` ## Usage @@ -38,7 +38,7 @@ npx codemod@latest run rntl-v14-update-deps --target ./path/to/your/project { "devDependencies": { "@testing-library/react-native": "^14.0.0-beta.0", - "test-renderer": "0.14.0" + "test-renderer": "0.16.0" } } ``` diff --git a/codemods/v14-update-deps/scripts/codemod.ts b/codemods/v14-update-deps/scripts/codemod.ts index 7f00ba025..21b2cec7d 100644 --- a/codemods/v14-update-deps/scripts/codemod.ts +++ b/codemods/v14-update-deps/scripts/codemod.ts @@ -4,7 +4,7 @@ import type { Transform } from 'codemod:ast-grep'; import type JSONLang from 'codemod:ast-grep/langs/json'; const RNTL_VERSION = '^14.0.0-beta.0'; -const TEST_RENDERER_VERSION = '0.14.0'; +const TEST_RENDERER_VERSION = '0.16.0'; interface PackageJson { dependencies?: Record; diff --git a/codemods/v14-update-deps/tests/fixtures/already-alpha/expected.json b/codemods/v14-update-deps/tests/fixtures/already-alpha/expected.json index 136ba6c37..a94fd3eaf 100644 --- a/codemods/v14-update-deps/tests/fixtures/already-alpha/expected.json +++ b/codemods/v14-update-deps/tests/fixtures/already-alpha/expected.json @@ -3,6 +3,6 @@ "version": "1.0.0", "devDependencies": { "@testing-library/react-native": "^14.0.0-beta.0", - "test-renderer": "0.14.0" + "test-renderer": "0.16.0" } } diff --git a/codemods/v14-update-deps/tests/fixtures/basic-update/expected.json b/codemods/v14-update-deps/tests/fixtures/basic-update/expected.json index 136ba6c37..a94fd3eaf 100644 --- a/codemods/v14-update-deps/tests/fixtures/basic-update/expected.json +++ b/codemods/v14-update-deps/tests/fixtures/basic-update/expected.json @@ -3,6 +3,6 @@ "version": "1.0.0", "devDependencies": { "@testing-library/react-native": "^14.0.0-beta.0", - "test-renderer": "0.14.0" + "test-renderer": "0.16.0" } } diff --git a/codemods/v14-update-deps/tests/fixtures/move-from-deps/expected.json b/codemods/v14-update-deps/tests/fixtures/move-from-deps/expected.json index 136ba6c37..a94fd3eaf 100644 --- a/codemods/v14-update-deps/tests/fixtures/move-from-deps/expected.json +++ b/codemods/v14-update-deps/tests/fixtures/move-from-deps/expected.json @@ -3,6 +3,6 @@ "version": "1.0.0", "devDependencies": { "@testing-library/react-native": "^14.0.0-beta.0", - "test-renderer": "0.14.0" + "test-renderer": "0.16.0" } } diff --git a/codemods/v14-update-deps/tests/fixtures/rntl-in-devdeps/expected.json b/codemods/v14-update-deps/tests/fixtures/rntl-in-devdeps/expected.json index ef737a47b..6cf17e5d7 100644 --- a/codemods/v14-update-deps/tests/fixtures/rntl-in-devdeps/expected.json +++ b/codemods/v14-update-deps/tests/fixtures/rntl-in-devdeps/expected.json @@ -1,6 +1,6 @@ { "devDependencies": { "@testing-library/react-native": "^14.0.0-beta.0", - "test-renderer": "0.14.0" + "test-renderer": "0.16.0" } } diff --git a/codemods/v14-update-deps/tests/fixtures/with-peer-deps/expected.json b/codemods/v14-update-deps/tests/fixtures/with-peer-deps/expected.json index 136ba6c37..a94fd3eaf 100644 --- a/codemods/v14-update-deps/tests/fixtures/with-peer-deps/expected.json +++ b/codemods/v14-update-deps/tests/fixtures/with-peer-deps/expected.json @@ -3,6 +3,6 @@ "version": "1.0.0", "devDependencies": { "@testing-library/react-native": "^14.0.0-beta.0", - "test-renderer": "0.14.0" + "test-renderer": "0.16.0" } } diff --git a/examples/basic/components/__tests__/AnimatedView.test.tsx b/examples/basic/components/__tests__/AnimatedView.test.tsx index 4de6d4f32..168a57ecd 100644 --- a/examples/basic/components/__tests__/AnimatedView.test.tsx +++ b/examples/basic/components/__tests__/AnimatedView.test.tsx @@ -20,7 +20,7 @@ describe('AnimatedView', () => { ); expect(screen.root).toHaveStyle({ opacity: 0 }); - await act(() => jest.advanceTimersByTime(250)); + await act(() => jest.advanceTimersByTimeAsync(250)); // Does not work with native driver // expect(screen.root).toHaveStyle({ opacity: 1 }); }); diff --git a/examples/basic/package.json b/examples/basic/package.json index 7502e3aee..2786bb0f9 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -29,7 +29,7 @@ "eslint": "^10.2.0", "eslint-plugin-testing-library": "^7.16.2", "jest": "~29.7.0", - "test-renderer": "0.14.0", + "test-renderer": "0.16.0", "typescript": "~5.9.2", "typescript-eslint": "^8.58.1" }, diff --git a/examples/basic/yarn.lock b/examples/basic/yarn.lock index b314e6e0b..7b5d4c85c 100644 --- a/examples/basic/yarn.lock +++ b/examples/basic/yarn.lock @@ -5012,7 +5012,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.16.0, is-core-module@npm:^2.16.1": +"is-core-module@npm:^2.16.0": version: 2.16.1 resolution: "is-core-module@npm:2.16.1" dependencies: @@ -7430,20 +7430,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.20.0": - version: 1.22.11 - resolution: "resolve@npm:1.22.11" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/f657191507530f2cbecb5815b1ee99b20741ea6ee02a59c57028e9ec4c2c8d7681afcc35febbd554ac0ded459db6f2d8153382c53a2f266cee2575e512674409 - languageName: node - linkType: hard - -"resolve@npm:^1.22.10, resolve@npm:^1.22.2": +"resolve@npm:^1.20.0, resolve@npm:^1.22.10, resolve@npm:^1.22.2": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -7465,20 +7452,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": - version: 1.22.11 - resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/ee5b182f2e37cb1165465e58c6abc797fec0a80b5ba3231607beb4677db0c9291ac010c47cf092b6daa2b7f518d69a0e21888e7e2b633f68d501a874212a8c63 - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin": +"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -7546,7 +7520,7 @@ __metadata: react-native: "npm:0.81.5" react-native-safe-area-context: "npm:^5.6.2" react-native-web: "npm:^0.21.2" - test-renderer: "npm:0.14.0" + test-renderer: "npm:0.16.0" typescript: "npm:~5.9.2" typescript-eslint: "npm:^8.58.1" languageName: unknown @@ -8137,15 +8111,15 @@ __metadata: languageName: node linkType: hard -"test-renderer@npm:0.14.0": - version: 0.14.0 - resolution: "test-renderer@npm:0.14.0" +"test-renderer@npm:0.16.0": + version: 0.16.0 + resolution: "test-renderer@npm:0.16.0" dependencies: "@types/react-reconciler": "npm:~0.31.0" react-reconciler: "npm:~0.31.0" peerDependencies: react: ^19.0.0 - checksum: 10c0/d259f5d146f57bb6689cb828de73cd95a559bc3203f1a21824b027a6b43143447bbf60eed5d2f8ea18b806ee15002aa6ba1d023e01669fa9945ca8278391667d + checksum: 10c0/8175d6519f68285357b17a3dd40ea500877a9920483a2d7271583139d4b296175f672d57a98a9f6ad9417ce3cd464d557130214585c7c959ded3dde1cae1f48e languageName: node linkType: hard diff --git a/examples/cookbook/package.json b/examples/cookbook/package.json index 84ef6c0c7..0970e7800 100644 --- a/examples/cookbook/package.json +++ b/examples/cookbook/package.json @@ -41,7 +41,7 @@ "eslint-plugin-testing-library": "^7.16.2", "jest": "~29.7.0", "msw": "2.7.0", - "test-renderer": "0.14.0", + "test-renderer": "0.16.0", "typescript": "~5.9.2", "typescript-eslint": "^8.58.1" }, diff --git a/examples/cookbook/yarn.lock b/examples/cookbook/yarn.lock index 0a61c16cc..8dd0bcc66 100644 --- a/examples/cookbook/yarn.lock +++ b/examples/cookbook/yarn.lock @@ -9064,7 +9064,7 @@ __metadata: react-native-screens: "npm:~4.16.0" react-native-web: "npm:^0.21.2" react-strict-dom: "npm:^0.0.55" - test-renderer: "npm:0.14.0" + test-renderer: "npm:0.16.0" typescript: "npm:~5.9.2" typescript-eslint: "npm:^8.58.1" languageName: unknown @@ -9729,15 +9729,15 @@ __metadata: languageName: node linkType: hard -"test-renderer@npm:0.14.0": - version: 0.14.0 - resolution: "test-renderer@npm:0.14.0" +"test-renderer@npm:0.16.0": + version: 0.16.0 + resolution: "test-renderer@npm:0.16.0" dependencies: "@types/react-reconciler": "npm:~0.31.0" react-reconciler: "npm:~0.31.0" peerDependencies: react: ^19.0.0 - checksum: 10c0/d259f5d146f57bb6689cb828de73cd95a559bc3203f1a21824b027a6b43143447bbf60eed5d2f8ea18b806ee15002aa6ba1d023e01669fa9945ca8278391667d + checksum: 10c0/8175d6519f68285357b17a3dd40ea500877a9920483a2d7271583139d4b296175f672d57a98a9f6ad9417ce3cd464d557130214585c7c959ded3dde1cae1f48e languageName: node linkType: hard diff --git a/package.json b/package.json index caaf2c6eb..0d4d38c39 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "jest": ">=29.0.0", "react": ">=19.0.0", "react-native": ">=0.78", - "test-renderer": "^0.14.0" + "test-renderer": "^0.16.0" }, "peerDependenciesMeta": { "jest": { @@ -97,7 +97,7 @@ "react-native": "0.85.0", "react-native-gesture-handler": "^2.31.1", "release-it": "^19.2.4", - "test-renderer": "0.14.0", + "test-renderer": "0.16.0", "typescript": "^6.0.2", "typescript-eslint": "^8.58.1" }, diff --git a/src/__tests__/render.test.tsx b/src/__tests__/render.test.tsx index 6587f7d3e..25e745e9e 100644 --- a/src/__tests__/render.test.tsx +++ b/src/__tests__/render.test.tsx @@ -33,11 +33,20 @@ test('does not warn when no options are passed', async () => { expect(_console.warn).not.toHaveBeenCalled(); }); +test('supports null options', async () => { + const TestComponent = () => Test; + + await render(, null as any); + + expect(screen.getByTestId('test')).toBeOnTheScreen(); + expect(_console.warn).not.toHaveBeenCalled(); +}); + test('does not warn when only valid options are passed', async () => { const TestComponent = () => Test; const Wrapper = ({ children }: { children: React.ReactNode }) => {children}; - await render(, { wrapper: Wrapper, createNodeMock: jest.fn() }); + await render(, { wrapper: Wrapper }); expect(_console.warn).not.toHaveBeenCalled(); }); @@ -66,16 +75,6 @@ describe('render options', () => { expect(screen.getByTestId('inner')).toBeOnTheScreen(); expect(screen.getByText('Inner Content')).toBeOnTheScreen(); }); - - test('createNodeMock option is passed to renderer', async () => { - const TestComponent = () => ; - const mockNode = { testProperty: 'testValue' }; - const createNodeMock = jest.fn(() => mockNode); - - await render(, { createNodeMock }); - - expect(screen.getByTestId('test')).toBeOnTheScreen(); - }); }); describe('component rendering', () => { diff --git a/src/__tests__/suspense-fake-timers.test.tsx b/src/__tests__/suspense-fake-timers.test.tsx index 495971337..709b4dd0f 100644 --- a/src/__tests__/suspense-fake-timers.test.tsx +++ b/src/__tests__/suspense-fake-timers.test.tsx @@ -14,8 +14,6 @@ afterEach(() => { }); function Suspending({ promise, testID }: { promise: Promise; testID: string }) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore React 18 does not have `use` hook React.use(promise); return ; } diff --git a/src/__tests__/suspense.test.tsx b/src/__tests__/suspense.test.tsx index eded69052..a6674bdf7 100644 --- a/src/__tests__/suspense.test.tsx +++ b/src/__tests__/suspense.test.tsx @@ -12,8 +12,6 @@ afterEach(() => { }); function Suspending({ promise, testID }: { promise: Promise; testID: string }) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore React 18 does not have `use` hook React.use(promise); return ; } diff --git a/src/helpers/__tests__/component-tree.test.tsx b/src/helpers/__tests__/component-tree.test.tsx index 18b8d2580..7b1de447f 100644 --- a/src/helpers/__tests__/component-tree.test.tsx +++ b/src/helpers/__tests__/component-tree.test.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { View } from 'react-native'; import { render, screen } from '../..'; -import { getContainerElement, getHostSiblings } from '../component-tree'; +import { getContainerElement, getInstanceSiblings } from '../component-tree'; function MultipleHostChildren() { return ( @@ -27,7 +27,7 @@ describe('getHostSiblings()', () => { , ); - const hostSiblings = getHostSiblings(screen.getByTestId('subject')); + const hostSiblings = getInstanceSiblings(screen.getByTestId('subject')); expect(hostSiblings).toEqual([ screen.getByTestId('siblingBefore'), screen.getByTestId('siblingAfter'), diff --git a/src/helpers/accessibility.ts b/src/helpers/accessibility.ts index 640b7dbc2..14fcea554 100644 --- a/src/helpers/accessibility.ts +++ b/src/helpers/accessibility.ts @@ -2,7 +2,7 @@ import type { AccessibilityRole, AccessibilityState, AccessibilityValue, Role } import { StyleSheet } from 'react-native'; import type { HostElement } from 'test-renderer'; -import { getContainerElement, getHostSiblings, isHostElement } from './component-tree'; +import { getContainerElement, getInstanceSiblings, isTestInstance } from './component-tree'; import { findAll } from './find-all'; import { isHostImage, isHostSwitch, isHostText, isHostTextInput } from './host-component-names'; import { getTextContent } from './text-content'; @@ -76,7 +76,7 @@ function isSubtreeInaccessible(element: HostElement): boolean { // iOS: accessibilityViewIsModal or aria-modal // See: https://reactnative.dev/docs/accessibility#accessibilityviewismodal-ios - const hostSiblings = getHostSiblings(element); + const hostSiblings = getInstanceSiblings(element); if (hostSiblings.some((sibling) => computeAriaModal(sibling))) { return true; } @@ -155,7 +155,7 @@ export function computeAriaLabel(element: HostElement): string | undefined { const container = getContainerElement(element); const labelElement = findAll( container, - (node) => isHostElement(node) && node.props.nativeID === labelElementId, + (node) => isTestInstance(node) && node.props.nativeID === labelElementId, { includeHiddenElements: true }, ); if (labelElement.length > 0) { diff --git a/src/helpers/component-tree.ts b/src/helpers/component-tree.ts index 30f6a4e73..eba3d540a 100644 --- a/src/helpers/component-tree.ts +++ b/src/helpers/component-tree.ts @@ -1,43 +1,43 @@ -import type { HostElement, HostNode } from 'test-renderer'; +import type { TestInstance, TestNode } from 'test-renderer'; import { screen } from '../screen'; /** * Checks if the given element is a host element. - * @param element The element to check. + * @param node The element to check. */ -export function isHostElement(element?: HostNode | null): element is HostElement { - return typeof element !== 'string' && typeof element?.type === 'string'; +export function isTestInstance(node?: TestNode | null): node is TestInstance { + return typeof node !== 'string' && typeof node?.type === 'string'; } -export function isElementMounted(element: HostElement) { +export function isElementMounted(element: TestInstance) { return getContainerElement(element) === screen.container; } /** * Returns host siblings for given element. - * @param element The element start traversing from. + * @param instance The element start traversing from. */ -export function getHostSiblings(element: HostElement): HostElement[] { +export function getInstanceSiblings(instance: TestInstance): TestInstance[] { // Should not happen - const parent = element.parent; + const parent = instance.parent; if (!parent) { return []; } return parent.children.filter( - (sibling) => typeof sibling !== 'string' && sibling !== element, - ) as HostElement[]; + (sibling) => typeof sibling !== 'string' && sibling !== instance, + ) as TestInstance[]; } /** - * Returns the containerelement of the tree. + * Returns the container element of the tree. * - * @param element The element start traversing from. + * @param instance The element start traversing from. * @returns The container element of the tree. */ -export function getContainerElement(element: HostElement) { - let current = element; +export function getContainerElement(instance: TestInstance) { + let current = instance; while (current.parent) { current = current.parent; } diff --git a/src/matchers/to-be-empty-element.ts b/src/matchers/to-be-empty-element.ts index 37cfae145..a58c75914 100644 --- a/src/matchers/to-be-empty-element.ts +++ b/src/matchers/to-be-empty-element.ts @@ -2,7 +2,7 @@ import { matcherHint, RECEIVED_COLOR } from 'jest-matcher-utils'; import redent from 'redent'; import type { HostElement } from 'test-renderer'; -import { isHostElement } from '../helpers/component-tree'; +import { isTestInstance } from '../helpers/component-tree'; import { formatElementList } from '../helpers/format-element'; import { checkHostElement } from './utils'; @@ -10,7 +10,7 @@ export function toBeEmptyElement(this: jest.MatcherContext, element: HostElement checkHostElement(element, toBeEmptyElement, this); // TODO check - const children = element.children.filter((child) => isHostElement(child)); + const children = element.children.filter((child) => isTestInstance(child)); return { pass: children.length === 0, diff --git a/src/matchers/utils.ts b/src/matchers/utils.ts index b10ef3339..736e72199 100644 --- a/src/matchers/utils.ts +++ b/src/matchers/utils.ts @@ -9,7 +9,7 @@ import { import redent from 'redent'; import type { HostElement } from 'test-renderer'; -import { isHostElement } from '../helpers/component-tree'; +import { isTestInstance } from '../helpers/component-tree'; class HostElementTypeError extends Error { constructor(received: unknown, matcherFn: jest.CustomMatcher, context: jest.MatcherContext) { @@ -49,7 +49,7 @@ export function checkHostElement( matcherFn: jest.CustomMatcher, context: jest.MatcherContext, ): asserts element is HostElement { - if (!isHostElement(element)) { + if (!isTestInstance(element)) { throw new HostElementTypeError(element, matcherFn, context); } } diff --git a/src/render.tsx b/src/render.tsx index 3c7ed23a3..cddbd75b3 100644 --- a/src/render.tsx +++ b/src/render.tsx @@ -24,8 +24,6 @@ export interface RenderOptions { */ // eslint-disable-next-line @typescript-eslint/no-explicit-any wrapper?: React.ComponentType; - - createNodeMock?: (element: React.ReactElement) => object; } export type RenderResult = Awaited>; @@ -35,13 +33,12 @@ export type RenderResult = Awaited>; * to assert on the output. */ export async function render(element: React.ReactElement, options: RenderOptions = {}) { - const { wrapper: Wrapper, createNodeMock, ...rest } = options || {}; + const { wrapper: Wrapper, ...rest } = options || {}; validateOptions('render', rest, render); const rendererOptions: RootOptions = { textComponentTypes: HOST_TEXT_NAMES, publicTextComponentTypes: ['Text'], - createNodeMock, }; const wrap = (element: React.ReactElement) => (Wrapper ? {element} : element); diff --git a/src/user-event/press/press.ts b/src/user-event/press/press.ts index 6d3b69cf1..44e41c36c 100644 --- a/src/user-event/press/press.ts +++ b/src/user-event/press/press.ts @@ -7,7 +7,7 @@ import { buildTouchEvent, } from '../../event-builder'; import { getEventHandlerFromProps } from '../../event-handler'; -import { isHostElement } from '../../helpers/component-tree'; +import { isTestInstance } from '../../helpers/component-tree'; import { ErrorWithStack } from '../../helpers/errors'; import { isHostText, isHostTextInput } from '../../helpers/host-component-names'; import { isPointerEventEnabled } from '../../helpers/pointer-events'; @@ -24,7 +24,7 @@ export interface PressOptions { } export async function press(this: UserEventInstance, element: HostElement): Promise { - if (!isHostElement(element)) { + if (!isTestInstance(element)) { throw new ErrorWithStack(`press() works only with host elements.`, press); } @@ -38,7 +38,7 @@ export async function longPress( element: HostElement, options?: PressOptions, ): Promise { - if (!isHostElement(element)) { + if (!isTestInstance(element)) { throw new ErrorWithStack(`longPress() works only with host elements.`, longPress); } diff --git a/yarn.lock b/yarn.lock index fc1527770..96dcf66e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3018,14 +3018,14 @@ __metadata: react-native-gesture-handler: "npm:^2.31.1" redent: "npm:^3.0.0" release-it: "npm:^19.2.4" - test-renderer: "npm:0.14.0" + test-renderer: "npm:0.16.0" typescript: "npm:^6.0.2" typescript-eslint: "npm:^8.58.1" peerDependencies: jest: ">=29.0.0" react: ">=19.0.0" react-native: ">=0.78" - test-renderer: ^0.14.0 + test-renderer: ^0.16.0 peerDependenciesMeta: jest: optional: true @@ -4101,7 +4101,7 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^2.0.1, brace-expansion@npm:^2.0.2": +"brace-expansion@npm:^2.0.1": version: 2.0.3 resolution: "brace-expansion@npm:2.0.3" dependencies: @@ -8250,11 +8250,11 @@ __metadata: linkType: hard "minimatch@npm:^9.0.4": - version: 9.0.9 - resolution: "minimatch@npm:9.0.9" + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: - brace-expansion: "npm:^2.0.2" - checksum: 10c0/0b6a58530dbb00361745aa6c8cffaba4c90f551afe7c734830bd95fd88ebf469dd7355a027824ea1d09e37181cfeb0a797fb17df60c15ac174303ac110eb7e86 + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed languageName: node linkType: hard @@ -10343,15 +10343,15 @@ __metadata: languageName: node linkType: hard -"test-renderer@npm:0.14.0": - version: 0.14.0 - resolution: "test-renderer@npm:0.14.0" +"test-renderer@npm:0.16.0": + version: 0.16.0 + resolution: "test-renderer@npm:0.16.0" dependencies: "@types/react-reconciler": "npm:~0.31.0" react-reconciler: "npm:~0.31.0" peerDependencies: react: ^19.0.0 - checksum: 10c0/d259f5d146f57bb6689cb828de73cd95a559bc3203f1a21824b027a6b43143447bbf60eed5d2f8ea18b806ee15002aa6ba1d023e01669fa9945ca8278391667d + checksum: 10c0/8175d6519f68285357b17a3dd40ea500877a9920483a2d7271583139d4b296175f672d57a98a9f6ad9417ce3cd464d557130214585c7c959ded3dde1cae1f48e languageName: node linkType: hard