45

我尝试在 React + TypeScript 中为 Jest 创建一个初始设置。我已完成初始设置并尝试检查测试是否运行。当我使用命令运行测试npm test时,我收到以下错误:

Cannot find name 'it'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.

我已经安装了 Jest 的类型并删除了 中的类型tsconfig.json,但我仍然遇到同样的错误。

{
  "compilerOptions": {
    "target": "es6",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "plugins": [{ "name": "typescript-tslint-plugin" }],
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "preserve",
    "pretty": true,
    "baseUrl": "src",
    "types": ["jest"],
    "typeRoots": ["./src/types"],
    "suppressImplicitAnyIndexErrors": true
  },
  "include": ["src", "node_modules/@types/jest"],
  "exclude": ["node_modules"]
}
`

包.json


    "jest": {
        "transform": {
          ".(ts|tsx)": "ts-jest"
        },
        "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
        "moduleFileExtensions": [
          "ts",
          "tsx",
          "js"
        ]
      },
      "devDependencies": {
        "@babel/plugin-proposal-export-default-from": "^7.2.0",
        "@types/enzyme": "^3.9.3",
        "@types/jest": "^24.0.14",
        "enzyme": "^3.10.0",
        "gh-pages": "^1.2.0",
        "husky": "^2.2.0",
        "jest": "^24.8.0",
        "node-sass": "^4.11.0",
        "prettier": "^1.17.0",
        "react-scripts": "2.1.8",
        "react-test-renderer": "^16.8.6",
        "stylelint": "^9.3.0",
        "stylelint-config-recommended-scss": "^3.2.0",
        "stylelint-config-standard": "^18.2.0",
        "stylelint-order": "^0.8.1",
        "stylelint-scss": "^3.1.3",
        "ts-jest": "^24.0.2",
        "tslint": "^5.16.0",
        "tslint-config-prettier": "^1.18.0",
        "tslint-plugin-prettier": "^2.0.1",
        "tslint-react": "^4.0.0",
        "tslint-react-hooks": "^2.1.0"
      }

4

11 回答 11

72

安装

npm install jest @types/jest ts-jest

jest.config.js -- 在根目录

 module.exports = {
  roots: ['<rootDir>/src'],
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
  testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
}

tsconfig.json

{
    "compilerOptions": {
     ...

      "types": ["reflect-metadata", "jest"],
      "typeRoots": ["./types", "./node_modules/@types"]

     ...
    },
    "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"],
    "include": ["./src/**/*.tsx", "./src/**/*.ts"]
  }
于 2019-07-28T13:59:05.730 回答
23

对我来说,问题是我tsconfig.json是用

  "include": [
    "src"
  ]

我不得不将其更改为

  "include": [
    "src",
    "tests"
  ]

(我的测试都在目录'tests'中)

于 2019-12-24T04:28:14.960 回答
16

在 tsconfig.json 添加以下代码

"types": ["jest"],
"typeRoots": ["./src/types", "node_modules/@types"],
于 2019-06-14T09:51:26.960 回答
12

在您的任何测试文件中导入它:

import '@types/jest';
于 2021-09-07T19:48:05.550 回答
5

我已经尝试了上述所有解决方案,但不幸的是,没有一个适合我。不过,在我的情况下有效的解决方案是通过/// <reference types="@types/jest" />;文件顶部的引用类型定义。您需要先安装@types/jest软件包。它的缺点是您必须将其导入所有文件中。

于 2021-09-03T09:59:21.023 回答
2

我必须在"@types/jest"我的"types"数组中添加tsconfig.json.

于 2022-01-17T08:55:23.087 回答
1

更新ts-loaderv6.0.1或更高版本可以解决问题。

于 2019-06-27T09:00:40.197 回答
1

安装 @types/jestnpm install @types/jest 并在 package.json 中将配置添加到 jest

...
"jest": {
     "globals": {
      "ts-jest": {
        "tsconfig": "path_our_tests/jest.tsconfig.json"
      }
    }
}

将文件 jest.tsconfig.json 创建到测试目录中,如下所示:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "types": ["jest"]
  }
}

这样您就不会更改项目的全局配置,并防止破坏您的代码

于 2021-03-24T00:48:24.010 回答
0

我不得不在 devDependency 中安装 jest:

npm i --save-dev @types/jest
于 2021-08-27T05:36:20.140 回答
0

以上解决方案都不适合我。甚至没有导入 '@types/jest' ,这在进行 npm 测试以导入 'jest' 时会引发错误。对我来说唯一的解决方案是 import { describe, it, beforeEach } from '@jest/globals' to test files

于 2022-02-08T05:00:21.663 回答
-1

就我而言,问题是我的目录中实际上没有jest文件夹./node_modules/@types。运行npm i @types/jest声称该软件包是,up to date但它仍然不存在于我node_modules/@types应该安装它的位置,因此错误仍然存​​在。

我通过@types/jest全局安装并将安装的包复制到我的./node_modules/@types.

要安装@jest/types全局运行:

npm i -g @types/jest

要获取全局 node_modules 的路径,请运行:

npm root -g

要确认@types/jest包在那里运行:

ls $(npm root -g)/@types

然后 cd 进入你的项目目录并运行

cp -R $(npm root -g)/@types/jest ./node_modules/@types

将其复制到本地 node_modules。

于 2021-01-26T08:40:26.843 回答