У меня есть следующая структура папок, уникальной особенностью которой является общий доступ по символической ссылке.
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 каждого проекта отдельно. Эта настройка прекрасно работает во время обычной работы, но во время тестов я получаю ошибки.
Изначально я надеялся, что смогу просто использовать jest таким же образом, как я запускаю проекты. Однако шутка не может следовать по символическим ссылкам . В связи с этим я сделал следующее 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 в проекте, в котором я выполняю тест?