Skip to content

Commit 3e992bc

Browse files
Add global Jest configuration and refactor Knip settings
- Introduced a new global Jest configuration file (jest.config.base.js) for consistent testing settings across the monorepo. - Removed the outdated jest.config.mjs file to streamline configuration management. - Updated Knip configuration in knip.ts to enhance workspace management, including clearer entry and ignore patterns for the root and package-specific settings. - Adjusted package.json scripts in the react-on-rails package to simplify test execution. These changes improve the organization and maintainability of the testing setup and workspace structure.
1 parent 87fe9cc commit 3e992bc

File tree

6 files changed

+97
-70
lines changed

6 files changed

+97
-70
lines changed

jest.config.base.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { createJsWithTsPreset } from 'ts-jest';
2+
3+
// Global Jest configuration for the monorepo
4+
// Contains common settings that all packages inherit
5+
export default {
6+
// === TypeScript Configuration ===
7+
// ts-jest preset with custom TypeScript settings
8+
...createJsWithTsPreset({
9+
tsconfig: {
10+
// Relative imports in our TS code include `.ts` extensions.
11+
// When compiling the package, TS rewrites them to `.js`,
12+
// but ts-jest runs on the original code where the `.js` files don't exist,
13+
// so this setting needs to be disabled here.
14+
rewriteRelativeImportExtensions: false,
15+
},
16+
}),
17+
18+
// === Test Environment Configuration ===
19+
testEnvironment: 'jsdom',
20+
21+
// === Common Test Patterns ===
22+
// Default test pattern - packages can override this
23+
testMatch: ['**/?(*.)+(spec|test).[jt]s?(x)'],
24+
25+
// === Common Module File Extensions ===
26+
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'],
27+
};

jest.config.mjs

Lines changed: 0 additions & 26 deletions
This file was deleted.

knip.ts

Lines changed: 37 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,57 +3,18 @@ import type { KnipConfig } from 'knip';
33
const config: KnipConfig = {
44
// ! at the end means files are used in production
55
workspaces: {
6+
// Root workspace - manages the monorepo and global tooling
67
'.': {
7-
entry: [
8-
'packages/react-on-rails/src/ReactOnRails.node.ts!',
9-
'packages/react-on-rails/src/pro/ReactOnRailsRSC.ts!',
10-
'packages/react-on-rails/src/pro/registerServerComponent/client.tsx!',
11-
'packages/react-on-rails/src/pro/registerServerComponent/server.tsx!',
12-
'packages/react-on-rails/src/pro/registerServerComponent/server.rsc.ts!',
13-
'packages/react-on-rails/src/pro/wrapServerComponentRenderer/server.tsx!',
14-
'packages/react-on-rails/src/pro/wrapServerComponentRenderer/server.rsc.tsx!',
15-
'packages/react-on-rails/src/pro/RSCRoute.tsx!',
16-
'packages/react-on-rails/src/pro/ServerComponentFetchError.ts!',
17-
'packages/react-on-rails/src/pro/getReactServerComponent.server.ts!',
18-
'packages/react-on-rails/src/pro/transformRSCNodeStream.ts!',
19-
'packages/react-on-rails/src/loadJsonFile.ts!',
20-
'eslint.config.ts',
21-
],
22-
project: [
23-
'packages/react-on-rails/src/**/*.[jt]s{x,}!',
24-
'packages/react-on-rails/tests/**/*.[jt]s{x,}',
25-
'!react_on_rails_pro/**',
26-
'!packages/react-on-rails/lib/**',
27-
],
28-
babel: {
29-
config: ['packages/react-on-rails/babel.config.js'],
30-
},
31-
ignore: [
32-
'packages/react-on-rails/tests/emptyForTesting.js',
33-
// Build output directories that should be ignored
34-
'packages/react-on-rails/lib/**',
35-
// Pro features exported for external consumption
36-
'packages/react-on-rails/src/pro/streamServerRenderedReactComponent.ts:transformRenderStreamChunksToResultObject',
37-
'packages/react-on-rails/src/pro/streamServerRenderedReactComponent.ts:streamServerRenderedComponent',
38-
'packages/react-on-rails/src/pro/ServerComponentFetchError.ts:isServerComponentFetchError',
39-
'packages/react-on-rails/src/pro/RSCRoute.tsx:RSCRouteProps',
40-
'packages/react-on-rails/src/pro/streamServerRenderedReactComponent.ts:StreamingTrackers',
41-
// Exclude entire pro directory - it has its own package.json with dependencies
42-
'react_on_rails_pro/**',
43-
],
8+
entry: ['eslint.config.ts'],
9+
project: ['*.{js,mjs,ts}'],
4410
ignoreBinaries: [
45-
// Knip fails to detect it's declared in devDependencies
46-
'nps',
47-
// local scripts
48-
'packages/react-on-rails/scripts/.*',
4911
// Has to be installed globally
5012
'yalc',
5113
],
14+
ignore: ['react_on_rails_pro/**'],
5215
ignoreDependencies: [
5316
// Required for TypeScript compilation, but we don't depend on Turbolinks itself.
5417
'@types/turbolinks',
55-
// Keep this even though knip doesn't detect usage
56-
'@babel/preset-typescript',
5718
// The Knip ESLint plugin fails to detect these are transitively required by a config,
5819
// though we don't actually use its rules anywhere.
5920
'@babel/eslint-parser',
@@ -74,6 +35,39 @@ const config: KnipConfig = {
7435
'react-on-rails-rsc',
7536
],
7637
},
38+
39+
// React on Rails core package workspace
40+
'packages/react-on-rails': {
41+
entry: [
42+
'src/ReactOnRails.node.ts!',
43+
'src/pro/ReactOnRailsRSC.ts!',
44+
'src/pro/registerServerComponent/client.tsx!',
45+
'src/pro/registerServerComponent/server.tsx!',
46+
'src/pro/registerServerComponent/server.rsc.ts!',
47+
'src/pro/wrapServerComponentRenderer/server.tsx!',
48+
'src/pro/wrapServerComponentRenderer/server.rsc.tsx!',
49+
'src/pro/RSCRoute.tsx!',
50+
'src/pro/ServerComponentFetchError.ts!',
51+
'src/pro/getReactServerComponent.server.ts!',
52+
'src/pro/transformRSCNodeStream.ts!',
53+
'src/loadJsonFile.ts!',
54+
],
55+
project: ['src/**/*.[jt]s{x,}!', 'tests/**/*.[jt]s{x,}', '!lib/**'],
56+
ignore: [
57+
'tests/emptyForTesting.js',
58+
// Jest setup and test utilities - not detected by Jest plugin in workspace setup
59+
'tests/jest.setup.js',
60+
'tests/testUtils.js',
61+
// Build output directories that should be ignored
62+
'lib/**',
63+
// Pro features exported for external consumption
64+
'src/pro/streamServerRenderedReactComponent.ts:transformRenderStreamChunksToResultObject',
65+
'src/pro/streamServerRenderedReactComponent.ts:streamServerRenderedComponent',
66+
'src/pro/ServerComponentFetchError.ts:isServerComponentFetchError',
67+
'src/pro/RSCRoute.tsx:RSCRouteProps',
68+
'src/pro/streamServerRenderedReactComponent.ts:StreamingTrackers',
69+
],
70+
},
7771
'spec/dummy': {
7872
entry: [
7973
'app/assets/config/manifest.js!',

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"version": "16.1.1",
44
"description": "react-on-rails monorepo workspace manager",
55
"private": true,
6+
"type": "module",
67
"workspaces": [
78
"packages/react-on-rails"
89
],
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// eslint-disable-next-line import/no-relative-packages, import/extensions
2+
import rootConfig from '../../jest.config.base.js';
3+
4+
const nodeVersion = parseInt(process.version.slice(1), 10);
5+
6+
// Package-specific Jest configuration
7+
// Inherits from root jest.config.mjs and adds package-specific settings
8+
export default {
9+
// Inherit all settings from root
10+
...rootConfig,
11+
12+
// Override: Package-specific test directory
13+
testMatch: ['<rootDir>/tests/**/?(*.)+(spec|test).[jt]s?(x)'],
14+
15+
// Package-specific: Jest setup files
16+
setupFiles: ['<rootDir>/tests/jest.setup.js'],
17+
18+
// Package-specific: Module name mapping for React Server Components
19+
// Only mock modules on Node versions < 18 where RSC features aren't available
20+
moduleNameMapper:
21+
nodeVersion < 18
22+
? {
23+
'react-on-rails-rsc/client': '<rootDir>/tests/emptyForTesting.js',
24+
'^@testing-library/dom$': '<rootDir>/tests/emptyForTesting.js',
25+
'^@testing-library/react$': '<rootDir>/tests/emptyForTesting.js',
26+
}
27+
: {},
28+
29+
// Set root directory to current package
30+
rootDir: '.',
31+
};

packages/react-on-rails/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"build": "yarn run clean && yarn run tsc --declaration",
99
"build-watch": "yarn run clean && yarn run tsc --watch",
1010
"clean": "rm -rf ./lib",
11-
"test": "cd ../.. && jest packages/react-on-rails/tests",
11+
"test": "jest",
1212
"type-check": "yarn run tsc --noEmit --noErrorTruncation",
1313
"prepack": "nps build.prepack",
1414
"prepare": "nps build.prepack",

0 commit comments

Comments
 (0)