如何强制使用ts-jest执行的测试在另一个文件夹中使用node_modules?

时间:2019-06-19 12:26:24

标签: typescript jestjs ts-jest

我具有以下文件夹结构,其独特之处在于通过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从项目的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?

0 个答案:

没有答案