2

我有以下文件夹结构,其独特之处在于通过符号链接共享。

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加载测试):srccommon

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?

4

0 回答 0