Jest 的 Intellisense 无法在 VS 代码中工作

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

编辑:运行
npm install @types/jest --save-dev
修复

只是尝试输入

it()
,自动建议是
isTag

我尝试添加 jsconfig.json

{
"compilerOptions": {
    "target": "es6"
},
"exclude": [
    "node_modules",
    "assets"
  ]
}

感谢任何对此提出建议的人!

reactjs visual-studio-code jestjs intellisense
12个回答
171
投票

添加到您的

jsconfig.json

{
    "typeAcquisition": {
        "include": [
            "jest"
        ]
    }
}

如果这不起作用,请尝试使用此命令:

npm install @types/jest

yarn add -D @types/jest

63
投票

2023 年更新

只需通过以下命令安装

@types/jest

npm i @types/jest --save-dev

yarn add -D @types/jest

22
投票
{
    "typeAcquisition": {
        "include": [
            "jest"
        ]
    }
}

对于那些未能将上述内容添加到根文件夹中的

jsconfig.json
的人:尝试将其添加到测试文件夹(包含
*.test.js
文件的文件夹)


4
投票

这并不适合所有人,但如果代码库在 monorepo 排列中有多个包,并且您使用 vscode 作为编辑器,您可能需要在根目录中安装

@types/jest
,而不是单独安装。


2
投票

Typescript 扩展是我问题的根本原因。我试图使用 Jest,但

expect
类型被
expect
中的
expect.js
覆盖,这显然是由 Typescript 在
/Users/cameronhudson/Library/Caches/typescript/5.0/node_modules/@types/expect.js
自动安装到全局缓存中的。我的初步“修复”是禁用 Typescript 扩展的自动类型获取。这可以在扩展程序的设置中完成。

我有一种感觉,这是一个严厉的解决方案,但希望它能引导某人找到正确的解决方案。


2
投票
npm i -D @types/jest

它会在 package.json 中自动添加一行:

    "devDependencies": {
        "@types/jest": "^29.5.2",
        "jest": "^29.5.0"
      }

你没有别的事可做。


1
投票

没有一个解决方案适合我。在深入研究了一些 github 存储库并发现它可以工作后,我发现了一个名为

jest.config.js
的文件。以下是该文件的配置:

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

注意:这是为了

ts
。如果您不使用打字稿,请将所有
ts
更改为
js
。 保存后,重新启动Vscode,就可以正常工作了。


0
投票

你在哪里称呼它会有所不同。有时,当您处于错误的函数或代码块中时,智能感知不起作用。

所以如果你尝试:

  beforeEach(() => ({
    mockedUseAccount.
  }));

智能感知不起作用。

如果你尝试:

  beforeEach(() => {
    mockedUseAccount.
  });

智能感知工作正常。


0
投票

奇怪的是这些还没有被共享 - 使用 jsdoc 代替:

https://jestjs.io/docs/configuration

jest.config.js

/** @type {import('jest').Config} */
const config = {
  verbose: true,
};

module.exports = config;

/** @returns {Promise<import('jest').Config>} */
module.exports = async () => {
  return {
    verbose: true,
  };
};

如果您使用的是 TypeScript 文件 (jest.config.ts):

import type {Config} from 'jest';

const config: Config = {
  verbose: true,
};

export default config;
import type {Config} from 'jest';

export default async (): Promise<Config> => {
  return {
    verbose: true,
  };
};

0
投票

正确答案确实是安装

@types/jest
:

yarn add -D @types/jest

但是,如果您已安装该程序并且 Jest 的功能(

describe
it
等)在 VS Code 中仍然没有类型信息,请检查
typeRoots
中的
tsconfig.json

我为一个没有任何自定义类型的包制作了一些自定义类型,并将它们放在

./types
文件夹中。为了让 TypeScript 识别这些,我将
typeRoots: ["./types"]
添加到我的
tsconfig.json
中。但是,在那里指定类型根会覆盖 TypeScript 的默认值 ["./node_modules/@types"]
,因此它将不再能够找到 
@types/jest

因此,如果您的

typeRoots

 中有 
tsconfig.json
 的自定义值,那么除了安装 
@types/jest
 之外,请确保还包含此值(将 
./types
 替换为您配置的任何其他自定义类型根文件夹):

"typeRoots": ["./node_modules/@types", "./types"],
    

0
投票
如果到目前为止还没有任何效果,你可以尝试一下。

检查 tsconfig.json 文件中的

"types": ["node","jest"],

如果列表中未添加 jest,请添加并重新启动 VS Code。


0
投票
我之前没有看到这一点,但如果依赖项已经在 package.json 中并且 vscode 仍然没有收到消息,那么使用显式导入是一个有效的选项。在我的例子中,vscode 保留智能感知 mocha 来描述、it、beforeAll 和expect。

我尝试了所有选项,但创建了 jsconfig.json

S/o @vikramvi 的

他对OP问题的评论让我找到了这个解决方案。

显式导入之前

显式导入后

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