我具有以下文件夹结构,其独特之处在于通过symlink共享的共同点。
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。在常规运行时,此设置可以正常运行,但是在测试期间,我遇到了错误。
我最初希望我可以像运行项目一样使用玩笑。但是,开玩笑是unable to follow 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?