// services/worker/jest.config.cjs —— 单测(src/*.spec.ts;Task 20 pipeline 单测)。 // 镜像 services/api/jest.config.ts 的约定(CJS 包直接用 .cjs,无需 ts-node): // · maxWorkers 1:单进程串行(e2e 配置继承后共享同一 MySQL/Redis/MinIO, // spec 间以 test/reset.ts TRUNCATE + 前缀清理隔离,并行会互相清掉对方数据); // · setupFiles 经 test/load-env.ts 载入仓库根 .env(全仓库唯一 env 文件); // · @photo/contracts(ESM)/@photo/db-cn/@photo/storage(CJS)经 moduleNameMapper // 直指 TS 源码,ts-jest 以 CJS 编译,无需先 build 依赖包 dist; // · contracts 源码 NodeNext 风格 .js 后缀导入 → 映射回 .ts。 /** @type {import('jest').Config} */ module.exports = { maxWorkers: 1, testEnvironment: 'node', rootDir: '.', setupFiles: ['./test/load-env.ts'], transform: { '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.json' }], }, moduleNameMapper: { '^@photo/contracts$': '/../../packages/contracts/src/index.ts', '^@photo/db-cn$': '/../../packages/db-cn/src/index.ts', '^@photo/storage$': '/../../packages/storage/src/index.ts', '^(\\.{1,2}/.*)\\.js$': '$1', }, testMatch: ['/src/**/*.spec.ts', '/test/**/*.spec.ts'], testPathIgnorePatterns: ['/node_modules/', '/dist/'], };