我有以下文件夹结构,其独特之处在于通过符号链接共享。
root
├── projects
│ ├── A
│ │ ├── node_modules
│ │ ├── common (symlink ../common)
│ │ ├── srcA.ts
│ │ └── testA.ts
│ ├── B
│ │ ├── node_modules
│ │ ├── common (symlink ../common)
│ │ ├── srcB.ts
│ │ └── testB.ts
│ └── common
│ ├── srcC.ts
│ └── testC.ts
请注意,符号链接文件夹common没有自己的 node_modules。相反,它分别使用每个项目的 node_modules。此设置在常规运行时工作正常,但在测试期间,我收到错误。
我最初希望我可以像运行项目一样简单地使用jest。但是, jest无法遵循 symlinks。因此,我制作了以下jest.config.js(请注意,从项目的 和从roots
加载测试):src
common
module.exports = {
rootDir: "./",
roots: ["../common/", "src/"],
preset: 'ts-jest',
resolver: "jest-pnp-resolver",
setupFiles: ["react-app-polyfill/jsdom"],
testMatch: ["**/?(*.)(spec|test).{js,jsx,ts,tsx}"],
testEnvironment: "jsdom",
testURL: "http://localhost",
transform: {
"^.+\\.(js|jsx|ts|tsx)$": "ts-jest",
"^.+\\.css$": "<rootDir>/scripts/config/jest/cssTransform.js",
"^(?!.*\\.(js|jsx|ts|tsx|css|json)$)": "<rootDir>/scripts/config/jest/fileTransform.js",
},
transformIgnorePatterns: ["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$", "^.+\\.module\\.(css|sass|scss)$"],
moduleNameMapper: {
"^react-native$": "react-native-web",
"^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy",
"^src/(.*)": "<rootDir>/src/$1",
"^common/(.*)": "<rootDir>/common/$1",
},
moduleFileExtensions: ["web.js", "js", "web.ts", "ts", "web.tsx", "tsx", "json", "web.jsx", "jsx", "node"],
};
但是,在测试期间testC.ts无法找到其关联项目的 node_modules。我已经多次尝试强制ts-jest使用项目的 node_modules:
module.exports = {
moduleDirectories: ["/home/large-project/projects/A"],
globals: {
"ts-jest": {
tsConfig: {
baseUrl: "/home/large-project/projects/A",
},
},
},
};
然而,它似乎并没有改变任何东西。如何通过 ts-jest 制作打字稿来告诉testC.ts
在我正在执行测试的项目中使用 node_modules?