Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: callstack/react-native-testing-library
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v13.1.0
Choose a base ref
...
head repository: callstack/react-native-testing-library
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v13.1.1
Choose a head ref
  • 3 commits
  • 5 files changed
  • 1 contributor

Commits on Mar 3, 2025

  1. feat: peer deps check (#1752)

    mdjastrzebski authored Mar 3, 2025
    Copy the full SHA
    c872048 View commit details

Commits on Mar 5, 2025

  1. fix: RNGH dep (#1754)

    mdjastrzebski authored Mar 5, 2025
    Copy the full SHA
    a1d2a15 View commit details
  2. chore: release v13.1.1

    mdjastrzebski committed Mar 5, 2025
    Copy the full SHA
    a7d89e1 View commit details
Showing with 118 additions and 9 deletions.
  1. +5 −4 package.json
  2. +50 −0 src/helpers/__tests__/ensure-peer-deps.test.ts
  3. +37 −0 src/helpers/ensure-peer-deps.ts
  4. +2 −0 src/index.ts
  5. +24 −5 yarn.lock
9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@testing-library/react-native",
"version": "13.1.0",
"version": "13.1.1",
"description": "Simple and complete React Native testing utilities that encourage good testing practices.",
"main": "build/index.js",
"types": "build/index.d.ts",
@@ -50,7 +50,6 @@
"chalk": "^4.1.2",
"jest-matcher-utils": "^29.7.0",
"pretty-format": "^29.7.0",
"react-native-gesture-handler": "^2.23.1",
"redent": "^3.0.0"
},
"peerDependencies": {
@@ -77,6 +76,7 @@
"@release-it/conventional-changelog": "^10.0.0",
"@relmify/jest-serializer-strip-ansi": "^1.0.2",
"@types/jest": "^29.5.14",
"@types/node": "^22.13.8",
"@types/react": "^19.0.0",
"@types/react-test-renderer": "^19.0.0",
"babel-jest": "^29.7.0",
@@ -87,9 +87,10 @@
"flow-bin": "~0.170.0",
"jest": "^29.7.0",
"prettier": "^2.8.8",
"react": "^19.0.0",
"react": "19.0.0",
"react-native": "0.78.0",
"react-test-renderer": "^19.0.0",
"react-native-gesture-handler": "^2.23.1",
"react-test-renderer": "19.0.0",
"release-it": "^18.0.0",
"typescript": "^5.6.3",
"typescript-eslint": "^8.19.1"
50 changes: 50 additions & 0 deletions src/helpers/__tests__/ensure-peer-deps.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/* eslint-disable @typescript-eslint/no-require-imports */

// Mock the require calls
jest.mock('react/package.json', () => ({ version: '19.0.0' }));
jest.mock('react-test-renderer/package.json', () => ({ version: '19.0.0' }));

describe('ensurePeerDeps', () => {
const originalEnv = process.env;

beforeEach(() => {
jest.resetModules();
process.env = { ...originalEnv };
delete process.env.RNTL_SKIP_DEPS_CHECK;
});

afterEach(() => {
process.env = originalEnv;
});

it('should not throw when versions match', () => {
expect(() => require('../ensure-peer-deps')).not.toThrow();
});

it('should throw when react-test-renderer is missing', () => {
jest.mock('react-test-renderer/package.json', () => {
throw new Error('Module not found');
});

expect(() => require('../ensure-peer-deps')).toThrow(
'Missing dev dependency "react-test-renderer@19.0.0"',
);
});

it('should throw when react-test-renderer version mismatches', () => {
jest.mock('react-test-renderer/package.json', () => ({ version: '18.2.0' }));

expect(() => require('../ensure-peer-deps')).toThrow(
'Incorrect version of "react-test-renderer" detected. Expected "19.0.0", but found "18.2.0"',
);
});

it('should skip dependency check when RNTL_SKIP_DEPS_CHECK is set', () => {
process.env.RNTL_SKIP_DEPS_CHECK = '1';
jest.mock('react-test-renderer/package.json', () => {
throw new Error('Module not found');
});

expect(() => require('../ensure-peer-deps')).not.toThrow();
});
});
37 changes: 37 additions & 0 deletions src/helpers/ensure-peer-deps.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
function ensurePeerDeps() {
const reactVersion = getPackageVersion('react');
ensurePackage('react-test-renderer', reactVersion);
}

function ensurePackage(name: string, expectedVersion: string) {
const actualVersion = getPackageVersion(name);
if (!actualVersion) {
const error = new Error(
`Missing dev dependency "${name}@${expectedVersion}".\n\nFix it by running:\nnpm install -D ${name}@${expectedVersion}`,
);
Error.captureStackTrace(error, ensurePeerDeps);
throw error;
}

if (expectedVersion !== actualVersion) {
const error = new Error(
`Incorrect version of "${name}" detected. Expected "${expectedVersion}", but found "${actualVersion}".\n\nFix it by running:\nnpm install -D ${name}@${expectedVersion}`,
);
Error.captureStackTrace(error, ensurePeerDeps);
throw error;
}
}

function getPackageVersion(name: string) {
try {
// eslint-disable-next-line @typescript-eslint/no-require-imports
const packageJson = require(`${name}/package.json`);
return packageJson.version;
} catch {
return null;
}
}

if (!process.env.RNTL_SKIP_DEPS_CHECK) {
ensurePeerDeps();
}
2 changes: 2 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// Temporaryli disable peer deps check
// import './helpers/ensure-peer-deps';
import './matchers/extend-expect';

import { getIsReactActEnvironment, setReactActEnvironment } from './act';
29 changes: 24 additions & 5 deletions yarn.lock
Original file line number Diff line number Diff line change
@@ -2838,6 +2838,7 @@ __metadata:
"@release-it/conventional-changelog": "npm:^10.0.0"
"@relmify/jest-serializer-strip-ansi": "npm:^1.0.2"
"@types/jest": "npm:^29.5.14"
"@types/node": "npm:^22.13.8"
"@types/react": "npm:^19.0.0"
"@types/react-test-renderer": "npm:^19.0.0"
babel-jest: "npm:^29.7.0"
@@ -2851,10 +2852,10 @@ __metadata:
jest-matcher-utils: "npm:^29.7.0"
prettier: "npm:^2.8.8"
pretty-format: "npm:^29.7.0"
react: "npm:^19.0.0"
react: "npm:19.0.0"
react-native: "npm:0.78.0"
react-native-gesture-handler: "npm:^2.23.1"
react-test-renderer: "npm:^19.0.0"
react-test-renderer: "npm:19.0.0"
redent: "npm:^3.0.0"
release-it: "npm:^18.0.0"
typescript: "npm:^5.6.3"
@@ -3008,6 +3009,15 @@ __metadata:
languageName: node
linkType: hard

"@types/node@npm:^22.13.8":
version: 22.13.8
resolution: "@types/node@npm:22.13.8"
dependencies:
undici-types: "npm:~6.20.0"
checksum: 10c0/bfc92b734a9dce6ac5daee0a52feccdf5dcb3804d895e4bc5384e2f4644612b8801725cd03c8c3c0888fb5eeb16b875877ac44b77641e0196dc1a837b1c2a366
languageName: node
linkType: hard

"@types/normalize-package-data@npm:^2.4.3":
version: 2.4.4
resolution: "@types/normalize-package-data@npm:2.4.4"
@@ -3031,7 +3041,16 @@ __metadata:
languageName: node
linkType: hard

"@types/react@npm:*, @types/react@npm:^19.0.0":
"@types/react@npm:*":
version: 19.0.10
resolution: "@types/react@npm:19.0.10"
dependencies:
csstype: "npm:^3.0.2"
checksum: 10c0/41884cca21850c8b2d6578b172ca0ca4fff6021251a68532b19f2031ac23dc5a9222470208065f8d9985d367376047df2f49ece8d927f7d04cdc94922b1eb34b
languageName: node
linkType: hard

"@types/react@npm:^19.0.0":
version: 19.0.8
resolution: "@types/react@npm:19.0.8"
dependencies:
@@ -9261,7 +9280,7 @@ __metadata:
languageName: node
linkType: hard

"react-test-renderer@npm:^19.0.0":
"react-test-renderer@npm:19.0.0":
version: 19.0.0
resolution: "react-test-renderer@npm:19.0.0"
dependencies:
@@ -9273,7 +9292,7 @@ __metadata:
languageName: node
linkType: hard

"react@npm:^19.0.0":
"react@npm:19.0.0":
version: 19.0.0
resolution: "react@npm:19.0.0"
checksum: 10c0/9cad8f103e8e3a16d15cb18a0d8115d8bd9f9e1ce3420310aea381eb42aa0a4f812cf047bb5441349257a05fba8a291515691e3cb51267279b2d2c3253f38471