Skip to content

Commit 1fd2726

Browse files
committed
Finish web and native jest projects configs
1 parent 8fc6f1b commit 1fd2726

File tree

3 files changed

+84
-6
lines changed

3 files changed

+84
-6
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
const { Platform } = require('react-native');
2+
3+
if (typeof window !== 'undefined' && typeof window.matchMedia !== 'function') {
4+
window.matchMedia = (query) => ({
5+
matches: false,
6+
media: query,
7+
onchange: null,
8+
addEventListener: () => {},
9+
removeEventListener: () => {},
10+
addListener: () => {},
11+
removeListener: () => {},
12+
dispatchEvent: () => false,
13+
});
14+
}
15+
16+
Platform.OS = 'web';
17+
18+
const originalSelect = Platform.select.bind(Platform);
19+
20+
Platform.select = (spec) => {
21+
if (spec == null) {
22+
return spec;
23+
}
24+
25+
if (typeof spec !== 'object' && typeof spec !== 'function') {
26+
return spec;
27+
}
28+
29+
/** @type {Record<string, unknown>} */
30+
const typedSpec = spec;
31+
32+
if ('web' in typedSpec) {
33+
return typedSpec.web;
34+
}
35+
36+
if ('default' in typedSpec) {
37+
return typedSpec.default;
38+
}
39+
40+
return originalSelect(typedSpec);
41+
};
Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,45 @@
1-
/** @type {import('jest').Config} */
2-
module.exports = {
1+
const { getWebPreset } = require('jest-expo/config');
2+
3+
const sharedSetupFiles = ['<rootDir>/jest-setup.js'];
4+
const sharedSetupFilesAfterEnv = ['@testing-library/jest-native/extend-expect'];
5+
6+
/**
7+
* @param {import('jest').Config} presetConfig
8+
* @returns {import('jest').Config}
9+
*/
10+
const createProject = ({
11+
modulePathIgnorePatterns = [],
12+
setupFiles = [],
13+
setupFilesAfterEnv = [],
14+
...rest
15+
}) => ({
16+
...rest,
17+
modulePathIgnorePatterns: [...modulePathIgnorePatterns, '<rootDir>/lib'],
18+
setupFiles: [...setupFiles, ...sharedSetupFiles],
19+
setupFilesAfterEnv: [...setupFilesAfterEnv, ...sharedSetupFilesAfterEnv],
20+
});
21+
22+
const nativeProject = createProject({
23+
displayName: 'native',
324
preset: 'react-native',
4-
modulePathIgnorePatterns: ['lib'],
5-
setupFiles: ['./jest-setup.js'],
6-
setupFilesAfterEnv: ['@testing-library/jest-native/extend-expect'],
725
testEnvironment: 'node',
8-
transformIgnorePatterns: [],
26+
testPathIgnorePatterns: ['\\.web\\.test\\.(?:js|jsx|ts|tsx)$'],
27+
});
28+
29+
30+
const {
31+
snapshotResolver: _,
32+
...baseWebPreset
33+
} = getWebPreset();
34+
35+
const webProject = createProject({
36+
...baseWebPreset,
37+
setupFiles: [...baseWebPreset.setupFiles, '<rootDir>/jest-web-setup.js'],
38+
displayName: 'web',
39+
testMatch: ['**/*.web.test.@(js|jsx|ts|tsx)'],
40+
testEnvironment: 'jsdom',
41+
});
42+
43+
module.exports = {
44+
projects: [nativeProject, webProject],
945
};

packages/react-native-reanimated/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@
120120
"clang-format-node": "1.3.5",
121121
"eslint": "9.37.0",
122122
"jest": "30.2.0",
123+
"jest-expo": "52.0.5",
123124
"knip": "5.61.3",
124125
"madge": "8.0.0",
125126
"prettier": "3.6.2",

0 commit comments

Comments
 (0)