diff --git a/package.json b/package.json index e3d4dc1c6..bedbfbac8 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "clean": "del build", "test": "jest", "test:ci": "jest --maxWorkers=2 --collectCoverage=true --coverage-provider=v8", - "test:react-17": "scripts/test_react_17", "typecheck": "tsc", "flow": "flow", "copy-flowtypes": "cp typings/index.flow.js build", @@ -59,9 +58,9 @@ }, "peerDependencies": { "jest": ">=28.0.0", - "react": ">=16.8.0", - "react-native": ">=0.59", - "react-test-renderer": ">=16.8.0" + "react": ">=18.2.0", + "react-native": ">=0.73", + "react-test-renderer": ">=18.2.0" }, "peerDependenciesMeta": { "jest": { @@ -80,7 +79,7 @@ "@release-it/conventional-changelog": "^8.0.1", "@relmify/jest-serializer-strip-ansi": "^1.0.2", "@types/jest": "^29.5.12", - "@types/react": "^18.2.65", + "@types/react": "^18.3.1", "@types/react-test-renderer": "^18.0.7", "babel-jest": "^29.7.0", "del-cli": "^5.1.0", @@ -90,9 +89,9 @@ "flow-bin": "~0.170.0", "jest": "^29.7.0", "prettier": "^2.8.8", - "react": "18.2.0", + "react": "18.3.1", "react-native": "0.74.1", - "react-test-renderer": "18.2.0", + "react-test-renderer": "18.3.1", "release-it": "^17.2.1", "strip-ansi": "^6.0.1", "typescript": "^5.4.5" diff --git a/scripts/test_react_17 b/scripts/test_react_17 deleted file mode 100755 index cbef0e0ce..000000000 --- a/scripts/test_react_17 +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -cp yarn.lock yarn.lock.backup -cp package.json package.json.backup - -yarn add -D react@17.0.2 react-test-renderer@17.0.2 react-native@0.68.3 --ignore-scripts -yarn test:ci --collectCoverage=false - -mv package.json.backup package.json -mv yarn.lock.backup yarn.lock - -yarn --ignore-scripts diff --git a/src/act.ts b/src/act.ts index 5c44ca358..a05168500 100644 --- a/src/act.ts +++ b/src/act.ts @@ -1,7 +1,6 @@ // This file and the act() implementation is sourced from react-testing-library // https://github.com/testing-library/react-testing-library/blob/c80809a956b0b9f3289c4a6fa8b5e8cc72d6ef6d/src/act-compat.js import { act as reactTestRendererAct } from 'react-test-renderer'; -import { checkReactVersionAtLeast } from './react-versions'; type ReactAct = typeof reactTestRendererAct; @@ -72,9 +71,7 @@ function withGlobalActEnvironment(actImplementation: ReactAct) { }; } -const act: ReactAct = checkReactVersionAtLeast(18, 0) - ? (withGlobalActEnvironment(reactTestRendererAct) as ReactAct) - : reactTestRendererAct; +const act = withGlobalActEnvironment(reactTestRendererAct) as ReactAct; export default act; export { setIsReactActEnvironment as setReactActEnvironment, getIsReactActEnvironment }; diff --git a/src/helpers/wrap-async.ts b/src/helpers/wrap-async.ts index 1f9797b48..a80d86156 100644 --- a/src/helpers/wrap-async.ts +++ b/src/helpers/wrap-async.ts @@ -1,8 +1,7 @@ /* istanbul ignore file */ -import act, { getIsReactActEnvironment, setReactActEnvironment } from '../act'; +import { getIsReactActEnvironment, setReactActEnvironment } from '../act'; import { flushMicroTasks } from '../flush-micro-tasks'; -import { checkReactVersionAtLeast } from '../react-versions'; /** * Run given async callback with temporarily disabled `act` environment and flushes microtasks queue. @@ -11,30 +10,15 @@ import { checkReactVersionAtLeast } from '../react-versions'; * @returns Result of the callback */ export async function wrapAsync(callback: () => Promise): Promise { - if (checkReactVersionAtLeast(18, 0)) { - const previousActEnvironment = getIsReactActEnvironment(); - setReactActEnvironment(false); + const previousActEnvironment = getIsReactActEnvironment(); + setReactActEnvironment(false); - try { - const result = await callback(); - // Flush the microtask queue before restoring the `act` environment - await flushMicroTasks(); - return result; - } finally { - setReactActEnvironment(previousActEnvironment); - } + try { + const result = await callback(); + // Flush the microtask queue before restoring the `act` environment + await flushMicroTasks(); + return result; + } finally { + setReactActEnvironment(previousActEnvironment); } - - if (!checkReactVersionAtLeast(16, 9)) { - return callback(); - } - - // Wrapping with act for react version 16.9 to 17.x - let result: Result; - await act(async () => { - result = await callback(); - }); - - // Either we have result or `callback` threw error - return result!; } diff --git a/website/docs/MigrationV13.md b/website/docs/MigrationV13.md index b58c4f93f..285c801a9 100644 --- a/website/docs/MigrationV13.md +++ b/website/docs/MigrationV13.md @@ -13,6 +13,12 @@ Migration to React Native Testing Library version 13 from version 12.x. # Breaking changes +## Supported React and React Native versions + +This version supports only React 19 and corresponding React Native versions. If you use React 18 or 19, please use latest of v12 versions. + +[Note: at the moment there is no React Native for React 19, and React 19 is still in beta, so we use React 18.3 for the time being]. + ## Removed deprecated \*ByAccessibilityState queries This deprecated query has been removed as is typically too general to give meaningful results. Use one of the following options: diff --git a/website/docs/OtherAPIs.md b/website/docs/OtherAPIs.md index cfe0b0f66..e21034847 100644 --- a/website/docs/OtherAPIs.md +++ b/website/docs/OtherAPIs.md @@ -101,10 +101,6 @@ await waitFor(() => { }, 10000); ``` -:::info -In order to properly use `waitFor` you need at least React >=16.9.0 (featuring async `act`) or React Native >=0.61 (which comes with React >=16.9.0). -::: - :::note If you receive warnings related to `act()` function consult our [Undestanding Act](./UnderstandingAct.md) function document. ::: diff --git a/yarn.lock b/yarn.lock index 59eb446a9..1a4972a6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3585,7 +3585,7 @@ __metadata: "@release-it/conventional-changelog": "npm:^8.0.1" "@relmify/jest-serializer-strip-ansi": "npm:^1.0.2" "@types/jest": "npm:^29.5.12" - "@types/react": "npm:^18.2.65" + "@types/react": "npm:^18.3.1" "@types/react-test-renderer": "npm:^18.0.7" babel-jest: "npm:^29.7.0" del-cli: "npm:^5.1.0" @@ -3597,18 +3597,18 @@ __metadata: jest-matcher-utils: "npm:^29.7.0" prettier: "npm:^2.8.8" pretty-format: "npm:^29.7.0" - react: "npm:18.2.0" + react: "npm:18.3.1" react-native: "npm:0.74.1" - react-test-renderer: "npm:18.2.0" + react-test-renderer: "npm:18.3.1" redent: "npm:^3.0.0" release-it: "npm:^17.2.1" strip-ansi: "npm:^6.0.1" typescript: "npm:^5.4.5" peerDependencies: jest: ">=28.0.0" - react: ">=16.8.0" - react-native: ">=0.59" - react-test-renderer: ">=16.8.0" + react: ">=18.2.0" + react-native: ">=0.73" + react-test-renderer: ">=18.2.0" peerDependenciesMeta: jest: optional: true @@ -3796,14 +3796,13 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^18.2.65": - version: 18.2.65 - resolution: "@types/react@npm:18.2.65" +"@types/react@npm:^18.3.1": + version: 18.3.1 + resolution: "@types/react@npm:18.3.1" dependencies: "@types/prop-types": "npm:*" - "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/91158b5a9e90489a5984bb610c3692001ecdf1d286c78384252698bcb306ef88e9434e75f01bf7739017e949e7690b7d6f1b7ef9d7097f86f3f649482a33604b + checksum: 10c0/18d856c12a4ec93f3cda2d58ef3d77a9480818afd3af895f812896fb82cfca1f35a692ab1add4ce826a4eb58a071624c7d1c8c6c4ccfb81c100d2916dc607614 languageName: node linkType: hard @@ -11004,7 +11003,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.2.0": +"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" checksum: 10c0/6eb5e4b28028c23e2bfcf73371e72cd4162e4ac7ab445ddae2afe24e347a37d6dc22fae6e1748632cd43c6d4f9b8f86dcf26bf9275e1874f436d129952528ae0 @@ -11025,6 +11024,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^18.3.1": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 + languageName: node + linkType: hard + "react-native@npm:0.74.1": version: 0.74.1 resolution: "react-native@npm:0.74.1" @@ -11097,25 +11103,25 @@ __metadata: languageName: node linkType: hard -"react-test-renderer@npm:18.2.0": - version: 18.2.0 - resolution: "react-test-renderer@npm:18.2.0" +"react-test-renderer@npm:18.3.1": + version: 18.3.1 + resolution: "react-test-renderer@npm:18.3.1" dependencies: - react-is: "npm:^18.2.0" + react-is: "npm:^18.3.1" react-shallow-renderer: "npm:^16.15.0" - scheduler: "npm:^0.23.0" + scheduler: "npm:^0.23.2" peerDependencies: - react: ^18.2.0 - checksum: 10c0/53dfada1da1e8dd0498a5601e9eea3dc6ca23c6c2694d1cab9712faea869c11e4ce1c9a618d674cb668a668b41fb6bcf9a7b0a078cd853b1922f002fa22f42c8 + react: ^18.3.1 + checksum: 10c0/c633558ef9af33bc68f0c4dbb5163a004c4fb9eade7bd0a7cfc0355fb367f36bd9d96533c90b7e85a146be6c525113a15f58683d269e0177ad77e2b04d4fe51c languageName: node linkType: hard -"react@npm:18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" +"react@npm:18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/b562d9b569b0cb315e44b48099f7712283d93df36b19a39a67c254c6686479d3980b7f013dc931f4a5a3ae7645eae6386b4aa5eea933baa54ecd0f9acb0902b8 + checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 languageName: node linkType: hard @@ -11668,12 +11674,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/b777f7ca0115e6d93e126ac490dbd82642d14983b3079f58f35519d992fa46260be7d6e6cede433a92db70306310c6f5f06e144f0e40c484199e09c1f7be53dd + checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 languageName: node linkType: hard