Jest:"roots[0]"选项中的目录未找到

8
我正在尝试设置monorepo以一次运行所有Jest测试。在每个包中,我使用react-app-rewired来获取Babel,以便从其他包导入的代码进行转译,而不需要从create-react-app中弹出,如this article所述。
当从每个包文件夹运行react-app-rewired test时,成功运行,但是当从monorepo的根文件夹运行时,我会收到此错误。
Directory /Users/Me/go/src/gitlab.com/my-org/front-end/src in the roots[0] option was not found.

我的前端文件夹(monorepo根目录)中没有src文件夹,我不知道为什么Jest要在那里查找。我尝试在jest.config.js中提供rootDir和roots,但这似乎没有任何区别。我该如何让Jest停止寻找不存在的文件夹? jest.config.js(根目录):
module.exports = {
  rootDir: ["."],
  projects: [
    "<rootDir>/packages/app",
    "<rootDir>/packages/components",
    "<rootDir>/packages/utils",
  ],
};

package.json(根目录):

{
  "name": "root",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "**/*.{js,jsx,ts,tsx,json,css,scss,md}": [
      "prettier --write"
    ]
  },
  "scripts": {
    "analyze": "source-map-explorer 'build/static/js/*.js'",
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject",
    "prettier": "prettier --check '**/*.js'",
    "prettier:fix": "prettier --write '**/*.js'"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

config-overrides.js (根目录):

const path = require("path");

const { override, babelInclude } = require("customize-cra");

module.exports = function (config, env) {
  return Object.assign(
    config,
    override(
      babelInclude([
        path.resolve("./packages/app"),
        path.resolve("./packages/components"),
        path.resolve("./packages/utils"),
      ])
    )(config, env)
  );
};

你找到解决方法了吗? - Gabe
@Gabe 我最终转向了 Cracohttps://github.com/gsoft-inc/craco它对我来说一直很有效。 - mrwnt10
2个回答

0

对我来说,config-overrides.js 中的以下代码有效。

module.exports = {
  jest: function(config) {
    config.collectCoverageFrom = ['client/**/*.{js,jsx,ts,tsx}', '!client/**/*.d.ts'];
    config.testMatch = [
      '<rootDir>/client/**/__tests__/**/*.{js,jsx,ts,tsx}',
      '<rootDir>/client/**/*.{spec,test}.{js,jsx,ts,tsx}',
    ];
    config.roots = ['<rootDir>/client'];
    return config;
  },

  // The paths config
  paths: function(paths, env) {
    paths.appIndexJs = path.resolve(__dirname, 'client/index.js');
    paths.appSrc = path.resolve(__dirname, 'client');
    return paths;
  },
};

我已将由 cra 创建的 src 文件夹重命名为 client,并添加了路径配置部分以反映这一更改。但仅此还不够,因此需要进行 jest 部分的配置。只需配置您自己的路径以反映您的结构即可。


-1
在你的根目录下创建一个名为"/src"的文件夹,其中包含你的package.json,然后将所有的__test__文件夹移动到该文件夹下。
这个文件夹结构对我很有效。

attaching the folder structure that worked for me


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接