使用 react-app-rewired 和 custom-cra 时如何配置 Jest?

Fre*_*eld 3 reactjs webpack jestjs create-react-app

我正在尝试Jestcreate-react-app使用override函数 fromcustomize-cra和 的a中设置测试react-app-rewired。我已经设置了一个相对路径别名,当我运行测试时它抛出错误cannot find module

这是代码...

// LoginForm.test.js

import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import LoginForm from './LoginForm';


it('submits', () => {
  const onSubmit = jest.fn();
  const { getByText } = render(<LoginForm onSubmit={onSubmit} />);
  fireEvent.click(getByText('Log in'));
  expect(onSubmit).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud)

// config-overrides.js

const {
  override,
  fixBabelImports,
  addLessLoader,
  addBabelPlugin
} = require("customize-cra");

module.exports = override(
  fixBabelImports("import", [
    {
      libraryName: "antd",
      libraryDirectory: "es"
      // style: true,
    },
    {
      libraryName: "ant-design-pro",
      libraryDirectory: "lib"
      // style: true,
    }
  ]),

  addBabelPlugin([
    "babel-plugin-root-import",
    {
      rootPathSuffix: "./src"
    }
  ]),

  addLessLoader({
    javascriptEnabled: true,
    modifyVars: {
      "@select-item-selected-font-weight": "500",
      "@font-family":
        '"Futura W01", "Futura", -apple -system, BlinkMacSystemFont, "Segoe UI", sans-serif',
      "@pagination-font-family":
        '"Futura W01", "Futura", -apple -system, BlinkMacSystemFont, "Segoe UI", sans-serif',
      "@statistic-font-family":
        '"Futura W01", "Futura", -apple -system, BlinkMacSystemFont, "Segoe UI", sans-serif'
    }
  })
);
Run Code Online (Sandbox Code Playgroud)

非常感谢任何指点,谢谢。

A. *_*nte 8

这可能有点旧,但我刚刚遇到并解决了它,所以也许它可以帮助其他人。

React app rewired 在底层使用 react-scripts,所以它不会选择你的 webpack 配置文件。但是有一种方法可以自定义它,您可以将 jest 配置放在 package.json 的根目录中:

"jest": {
    "moduleNameMapper": {
        "^@app(.*)$": "<rootDir>/src/ui/app$1"
    },
    "setupFiles": [
       "<rootDir>/config/jest/setupTests.js"
    ]
}
Run Code Online (Sandbox Code Playgroud)

如果您转到 react-scripts/scripts/test 的源代码并看到它正在创建 jest 配置,则可以看到 react-script 正在获取此配置:

const createJestConfig = require('./utils/createJestConfig');

该文件使用 package.json 中的 jest 配置覆盖默认配置:

const overrides = Object.assign({}, require(paths.appPackageJson).jest);

其中paths.appPackageJson 是你的package.json

  • 问题是这会将 `package.json` 中的 Jest 配置与默认配置合并。就我而言,这是一个问题,因为我需要 `transformIgnorePatterns` 为空数组 (4认同)