Files
TermiNexus e9e4693333
Some checks failed
Run mypy_primer on push / Run mypy_primer on push (push) Has been cancelled
Validation / Typecheck (push) Has been cancelled
Validation / Style (push) Has been cancelled
Validation / Test macos-latest (push) Has been cancelled
Validation / Test ubuntu-latest (push) Has been cancelled
Validation / Test windows-latest (push) Has been cancelled
Validation / Build (push) Has been cancelled
Validation / Required (push) Has been cancelled
初始化上传
2026-07-24 17:08:39 +08:00

74 lines
3.1 KiB
JavaScript

/*
* jest.config.js
*
* Configuration for jest tests.
*/
// When PYLANCE_JEST_TRANSPILE_ONLY=1 (set by pyrx CI), switch ts-jest into transpile-only
// mode via `isolatedModules: true` (uses `tsc.transpileModule`, no type checking — much
// faster). Tests are still type-checked by the dedicated `Typecheck` CI job. When unset
// (default / local dev), ts-jest runs with full type-checking so type errors still surface.
//
// We intentionally stay on ts-jest in both modes so the emitted JS is byte-identical to the
// local-dev configuration. Alternative transformers like @swc/jest can break edge cases the
// rest of the test suite relies on (e.g. `jest.spyOn` on namespace exports — SWC emits
// non-configurable getters — or `override readonly field!:` subclass fields, which SWC
// re-defines after `super()` returns and so wipes the parent's assignment).
const useTranspileOnly = process.env.PYLANCE_JEST_TRANSPILE_ONLY === '1';
// In transpile-only mode we pass an inline compilerOptions object so we can force
// `module: 'commonjs'`. The parent tsconfig chain sets `module: 'node16'`, which would
// otherwise leave dynamic `import()` calls untransformed — those then require
// `--experimental-vm-modules` under Jest. The set of options below mirrors the bits of
// `tsconfig.jest.json` that matter for `tsc.transpileModule`.
const transpileOnlyTsconfig = {
target: 'es2019',
module: 'commonjs',
moduleResolution: 'node',
esModuleInterop: true,
allowSyntheticDefaultImports: true,
experimentalDecorators: true,
resolveJsonModule: true,
isolatedModules: true,
preserveConstEnums: false,
baseUrl: '.',
paths: {
'vscode-languageserver': ['./node_modules/vscode-languageserver/lib/common/api'],
'vscode-languageserver/node': ['./node_modules/vscode-languageserver/lib/node/main'],
'vscode-languageserver-protocol': ['./node_modules/vscode-languageserver-protocol/lib/common/api'],
'vscode-languageserver-textdocument': ['./node_modules/vscode-languageserver-textdocument/lib/umd/main'],
'vscode-languageserver-types': ['./node_modules/vscode-languageserver-types/lib/umd/main'],
'vscode-jsonrpc': ['./node_modules/vscode-jsonrpc/lib/common/api'],
'vscode-jsonrpc/node': ['./node_modules/vscode-jsonrpc/lib/node/main'],
},
};
const transform = {
'^.+\\.tsx?$': [
'ts-jest',
useTranspileOnly
? {
tsconfig: transpileOnlyTsconfig,
isolatedModules: true,
diagnostics: false,
}
: {
tsconfig: 'tsconfig.jest.json',
diagnostics: {
ignoreCodes: [151002],
},
},
],
};
module.exports = {
testEnvironment: 'node',
roots: ['<rootDir>/src/tests'],
transform,
// Place jest's transform cache inside node_modules so the existing node_modules CI cache
// preserves it across runs.
cacheDirectory: '<rootDir>/node_modules/.cache/jest',
testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
};