找不到名称“描述”。您是否需要为测试运行程序安装类型定义?

时间:2019-01-11 01:21:25

标签: typescript jestjs

将TypeScript与Jest结合使用时,我的规格将失败,并显示以下错误消息:

test/unit/some.spec.ts:1:1 - error TS2582: Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
test/unit/some.spec.ts:2:3 - error TS2582: 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`.
test/unit/some.spec.ts:3:7 - error TS2304: Cannot find name 'expect'.
test/unit/some.spec.ts:7:1 - error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.

类型已经安装。

我使用:

    "@types/jest": "^23.3.12",
    "jest": "^23.6.0",
    "ts-jest": "^23.10.5",
    "typescript": "^3.1.6"

我使用jest --forceExit --coverage --verbose

运行测试

23 个答案:

答案 0 :(得分:21)

用于解决此问题的简单清单(用于TypeScript和Jest)。

  1. 确保已安装@types/jest@types/node
  2. 确保已在tsconfig.json中链接了这些类型,以便:types: ["jest", "node"]
  3. 请确保您没有在tsconfig.json属性的excluded配置中未排除测试或测试目录

如果您转换为JS,则您的测试中将需要一个单独的tsconfig.json,其中包括测试文件以及必要的编译器选项和用于构建适当上下文的文件。

答案 1 :(得分:12)

您必须在测试文件中导入笑话:

import 'jest';

另一种解决方法是在您的tsconfig.json文件中添加:

   "compilerOptions": {
     "types": [ "node", "jest" ],
     "moduleResolution": "node"
   }

如果使用的是tslint,则问题可能是tsconfig.json末尾的不必要的逗号,例如:

{
  "compileOnSave": true,
  "include": [
    "src"
  ],  // remove this comma
}

答案 2 :(得分:9)

我能够解决此问题的唯一方法是,将tests/文件夹添加到tsconfig.json文件中的“ include”中:

"include": [
  "src/**/*.ts",
  "tests/*.ts"
] 

对于也有eslint抱怨的人,您需要在jest文件中添加.eslintrc.json

"env": {
  "es2020": true,
  "node": true,
  "jest": true
}

答案 3 :(得分:7)

以上均未解决我的问题。 我必须将"@types/jest"添加到types文件中的tsconfig.json数组中。

答案 4 :(得分:6)

以下配置对我有用。我将 node_modules/@types 添加到 typeRoots

{
  "compilerOptions": {
    // ...rest of my settings
    "typeRoots": ["node_modules/@types"],
    "types": ["jest", "node"]
  }
}

答案 5 :(得分:6)

就我而言(vs 代码、create-react-app、纱线工作区、jest@26、@types/jest、"types": ["node", "jest"] 中存在的 tsconfig.json测试运行正常,但 IDE 用红色下划线所有 describeit。在尝试了很长时间后,我重新加载 VS Code 窗口 之前没有任何帮助?‍♂️?

答案 6 :(得分:5)

测试文件夹tsconfig.json中可以有一个单独的__tests__

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "../build",
        "noEmit": true,
        "rootDir": "../",
    },
    "exclude": ["node_modules"],
}

扩展了根文件夹中的一个:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "./lib",
    "rootDir": "./src",
    "strict": true,
    "noImplicitAny": true,
    "esModuleInterop": true,
  },
  "exclude": ["node_modules", "**/*.test.ts", "__tests__"]
}

这样,您测试文件的方式仍会从公共版本中排除,但仍会共享所有常用选项。

答案 7 :(得分:4)

我将VSCode用作我的IDE,并且在我的Angular项目中,我不得不注释掉/删除tsconfig.json中的类型,并在tsconfig.spec.json中添加类笑话。

tsconfig.json

{
  "compilerOptions": {
    // "types": []
  }
}

tsconfig.spec.json

{
  "compilerOptions": {
    "types": ["jest", "node"]
  }
}

答案 8 :(得分:3)

以上解决方案都没有帮助我

我正在使用:

  • 角 11
  • 开玩笑
  • 卸载与 Jasmine/Karma 相关的任何内容
  • .spec 文件与组件位于同一文件夹中(从 ng g 自动生成)


对我有用的是将 exclude 添加到 tsconfig.app.json(不是 tsconfig.json)以在提供应用程序时忽略所有规范文件。

tsconfig.app.json

"exclude": [
    "**/*.spec.ts"
]

ng snpm test 现在对我有用。

答案 9 :(得分:3)

这对我有用:

import '@types/jest';

答案 10 :(得分:2)

对于 lerna monorepo 用户

我正在运行一个 lerna monorepo,这是我必须做的来修复它:

  1. 确保"@types/jest"在根包的package.json的devDependencies以及packages/目录下的单个包中,并且你已经运行lerna bootstrap来安装/链接node_modules 目录中的那些软件包
  2. 确保 "types": ["node", "jest"] 部分位于您的根 tsconfig.json 中。
  3. 我将 import 'jest'; 添加到我的单个 *.test.ts 文件的顶部。

答案 11 :(得分:1)

我正在使用mochachaichai-http来测试Node Express.js项目。我以前没有在types中使用compilerOptions,但是在tsconfig.json中添加以下设置使其适用于我:

{
  "compilerOptions": {
    // ...rest of my settings
    "types": ["mocha", "chai", "chai-http"]
  }
}

答案 12 :(得分:1)

您需要在tsconfig.json中包含您的测试路径。

我通过在项目根目录中包含tsconfig.jsontsconfig.build.json解决了该问题。 tsconfig.json包含所有选项,包括

"include": ["src/**/*", "test/**/*"],

tsconfig.build.json

{
  "extends": "./tsconfig.json",
  "include": ["src/**/*"]
}

然后在package.json中输入(干净脚本可选):

"scripts": {
  "clean": "rm -rf dist",
  "build": "npm run clean && tsc --build tsconfig.prod.json,
  ...
}

答案 13 :(得分:1)

您需要在tsconfig.json中包含您的测试路径。

示例:假设您将路径命名为tests/并将其放在根项目目录中,则需要在tsconfig的“ include”参数中指定以查找睾丸文件:

  1. 转到:tsconfig.json
  2. 添加:
"include": [
    "tests/*.<file_test_extension>",
],
  • <file_test_extension>: ts | js |等

希望能提供帮助

答案 14 :(得分:1)

@Greg Woz是最完整的答案,就我而言,由于某种原因,初始tsconfig.json文件包含"exclude": ["node_modules", "**/__tests__/*"],这是根本原因。删除后"**/__tests__/*"。并确保它还包括:"types": ["jest"]。可以。

对于配置更改后重新启动Vscode 同样重要。浪费我数小时的时间来尝试所有不同的方法而无需重新启动它。

答案 15 :(得分:1)

什么对我有用。

这发生在 VS Code 中。您需要运行 npm i --save-dev @types/jest,并在您的

tsconfig.json

你需要放置

"jest""compilerOptions"

下的类型中

喜欢

"types": ["gapi", "gapi.auth2", "jest"],

你就完成了。

答案 16 :(得分:1)

就我而言,问题出在一个特定的文件中。我没有发现问题本身,但是通过在文件的导入中添加import {} from 'jest'可以解决此问题。

从笑话问题跟踪器或SO或其他没有帮助的方法中找不到其他方法。只是一些疯狂的解决方法fixed‍♂️

修复的一些疯狂的错误

是的,我当然将最新的jestts-jest@types/jest添加到package.json中

答案 17 :(得分:1)

您需要在项目中安装 ts-jest 依赖项吗

yarn add ts-jest -D

在您的 jest.config.ts 文件中,您需要将包含 preset: undefined 的行设置为 preset: 'ts-jest'

// A preset that is used as a base for Jest's configuration
preset: 'ts-jest',

答案 18 :(得分:0)

在摆弄tsconfig.json一段时间后,我终于想出了,对"types": [],进行注释会起作用。

失败的配置(之前)

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

工作配置

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

答案 19 :(得分:0)

可能有多种原因:

  1. 如果未安装 @types/jest,请尝试安装它并在 tsconfig.json 中定义类型,例如 "typeRoots": ["node_modules/@types/", "./src/@types/", ".src/**/@types/"]

  2. VS 代码问题:尝试在项目目录中打开 vs 代码,而不是在其父目录中打开。

答案 20 :(得分:0)

另一件可能出错的事情是,如果您在项目上方的父目录中打开了 vscode。这发生在我身上,因为我们使用的是 Visual Studio 解决方案,而且我不仅打开了项目,还打开了整个解决方案。

简单地说,确保 vscode 对你的项目的根目录开放。

答案 21 :(得分:0)

我错过了 tsconfig.json,我所要做的就是运行 tsc --init 并且 vs 代码不再抱怨“描述”:

{
  "compilerOptions": {
    /* Visit https://aka.ms/tsconfig.json to read more about this file */

    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "es5",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    // "lib": [],                             /* Specify library files to be included in the compilation. */
    // "allowJs": true,                       /* Allow javascript files to be compiled. */
    // "checkJs": true,                       /* Report errors in .js files. */
    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
    // "outFile": "./",                       /* Concatenate and emit output to single file. */
    // "outDir": "./",                        /* Redirect output structure to the directory. */
    // "rootDir": "./",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    // "composite": true,                     /* Enable project compilation */
    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
    // "removeComments": true,                /* Do not emit comments to output. */
    // "noEmit": true,                        /* Do not emit outputs. */
    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */

    /* Strict Type-Checking Options */
    "strict": true,                           /* Enable all strict type-checking options. */
    // "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
    // "strictNullChecks": true,              /* Enable strict null checks. */
    // "strictFunctionTypes": true,           /* Enable strict checking of function types. */
    // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
    // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
    // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */

    /* Additional Checks */
    // "noUnusedLocals": true,                /* Report errors on unused locals. */
    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */
    // "noUncheckedIndexedAccess": true,      /* Include 'undefined' in index signature results */

    /* Module Resolution Options */
    // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
    // "typeRoots": [],                       /* List of folders to include type definitions from. */
    // "types": [],                           /* Type declaration files to be included in compilation. */
    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
    "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */

    /* Source Map Options */
    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */

    /* Experimental Options */
    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */

    /* Advanced Options */
    "skipLibCheck": true,                     /* Skip type checking of declaration files. */
    "forceConsistentCasingInFileNames": true  /* Disallow inconsistently-cased references to the same file. */
  }
}

答案 22 :(得分:0)

我用ts-jest安装了npm i -D ts-jest,错误消失了