簡體   English   中英

使用 react-app-rewired 和 customize-cra 時如何配置 Jest?

[英]How configure Jest when using react-app-rewired and customize-cra?

我正在嘗試在使用來自customize-crareact-app-rewired rewired 的override function 的create-react-app中使用Jest設置測試。 我已經設置了一個相對路徑別名,當我運行測試時它拋出錯誤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();
});

// 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'
    }
  })
);

非常感謝任何指針,謝謝。

這可能有點舊,但我剛剛遇到並解決了它,所以也許它可以幫助其他人。

React app rewired 在底層使用 react-scripts,所以它不會獲取你的 webpack 配置文件。 但是有一種方法可以自定義它,您可以將 jest 配置放在 package.json 的根目錄中:

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

如果您轉到 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

由於測試不通過 webpack 進行,路徑別名將不起作用。 但是,它們確實通過 Babel,因此您可以使用“babel-plugin-module-resolver”。 通常你會這樣做:

// .babelrc
{
"plugins": [
  ["module-resolver", {
    "root": ["./src"],
    "alias": {
      "test": "./test",
      "components": "./src/components"
    }
  }]
 ]
}

但是看看上面的override看起來這可能有效:

addBabelPlugin([
  "babel-plugin-root-import",
  {
    rootPathSuffix: "./src"
  },
  "module-resolver",{
      "root": ["./src"],
       "alias": {
          "test": "./test",
          "components": "./src/components"
       }
   }
 ])

可以用.babelrc,我是這樣弄的

閱讀react-app-rewired的 README.md ,它對我有很大幫助。

// for jest 
{
    "plugins": [
        [
            "babel-plugin-root-import",
            {
                "rootPathSuffix": "src"
            }
        ]
    ]
}

為了

“babel-plugin-root-import”:“~6.4.1” “customize-cra”:“~0.9.1” “反應”:“~16.8.6”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM