Jest 遇到了意外的令牌。默认情况下,“node_modules”文件夹被变压器忽略

问题描述 投票:0回答:1

我正在运行测试文件并收到以下错误

● Test suite failed to run

    Jest encountered an unexpected token

    Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.

    Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.

    By default "node_modules" folder is ignored by transformers.

我尝试添加 Babel 但没有成功。 我想我可能只需要添加 jest.config.json 但我不知道如何实现它。 抱歉,我对这些东西还很陌生。

这是我的 ts.config.json

{
  "compilerOptions": {
    "target": "es5",
    "baseUrl": "src",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",
    "noImplicitReturns": true,
    "noUnusedLocals": false,
    "noUnusedParameters": false
  },
  "include": ["src"]
}

这是我的测试文件。

import React from "react"
import { Provider } from "react-redux"

import configureStore from "redux-mock-store"
import thunk from "redux-thunk"

// import { expect, describe, it } from "@jest/globals"
import { render, screen, fireEvent } from "@testing-library/react"

import { getAlgoList } from "store/slice/AlgorithmList/AlgorithmListActions"

// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
import { AlgorithmTreeView } from "./TreeView"

jest.mock("store/slice/AlgorithmList/AlgorithmListActions", () => ({
  getAlgoList: jest.fn(),
}))

const mockStore = configureStore([thunk])

describe("AlgorithmTreeView", () => {
  let store: ReturnType<typeof mockStore>

  beforeEach(() => {
    store = mockStore({...})
})

  it("renders the AlgorithmTreeView component", () => {
    render(
      <Provider store={store}>
        <AlgorithmTreeView />
      </Provider>,
    )

    expect(screen.getByText("Data")).toBeInTheDocument()
    expect(screen.getByText("Algorithm")).toBeInTheDocument()
    expect(screen.getByText("node1")).toBeInTheDocument()
    expect(screen.getByText("node2")).toBeInTheDocument()
  })

etc...

我尝试添加 Babel 但没有成功。

reactjs typescript jestjs
1个回答
0
投票

您遇到的问题可能是由于

Jest
无法处理一些现成的现代
JavaScript
TypeScript
语法。

由于您的项目正在使用

TypeScript
和现代
JavaScript
功能,因此您需要配置
Babel
才能使用
Jest
。在项目的根目录中创建一个
.babelrc
文件,其中包含以下内容:

{
  "presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"]
}

这告诉

Babel
使用现代
JavaScript
React
TypeScript
所需的预设来转译代码。

接下来,创建或更新您的

jest.config.js
以包含
Babel
并确保
Jest
知道
TypeScript
文件。这是基本配置:

module.exports = {
  preset: 'ts-jest',
  transform: {
    "^.+\\.(ts|tsx)$": "babel-jest"
  },
  moduleFileExtensions: ["ts", "tsx", "js", "jsx"],
  testEnvironment: "jsdom",
  transformIgnorePatterns: ["node_modules/(?!(my-esm-dependency)/)"],
};

确保安装了必要的依赖项:

npm install --save-dev babel-jest @babel/core @babel/preset-env @babel/preset-react @babel/preset-typescript ts-jest

你的

tsconfig.json
看起来不错,但是如果你想输出编译后的文件,请确保你没有
"noEmit": true
。由于您将
TypeScript
Babel
一起使用,
Jest
将为您处理转换,因此此设置通常没问题。

您可以在下面的文档中找到更多信息:

此设置应该有助于

Jest
理解您的
TypeScript
和现代
JavaScript
语法。如果您仍然遇到问题,请仔细检查已安装的依赖项版本并确保它们兼容。

© www.soinside.com 2019 - 2024. All rights reserved.