VS Code Jest 和 Cypress 智能感知无法与 Chai 正常工作

cod*_*der 6 intellisense jestjs visual-studio-code cypress

我使用 Jest 作为单元测试框架,下面的智能感知是正确的:

在此输入图像描述

但是,当我安装 Cypress 时"cypress": "^3.2.0",相同的代码现在显示 error Property 'toMatch' does not exist on type 'Assertion'. Did you mean 'match'?。IMO 的原因是 Cypress 在下面安装了类型node_modules/cypress/types/chai/index.d.ts,而 VS Code 正在选择它们进行智能感知。Jest 和 Cypress 都依赖于 Chai 断言库。安装 Cypress 后的 Intellisense:

在此输入图像描述

有没有办法告诉 VS Code 在特定文件夹中使用哪个 Chai 智能感知?或者有什么方法可以在jsconfig.json文件中指定它?

小智 9

cypress 和 jest 也有同样的问题。

我通过创建两个 jsconfig.json 解决了这个问题

赛普拉斯/jsconfig.json

{
  "typeAcquisition": { "include": ["cypress"] }
}
Run Code Online (Sandbox Code Playgroud)

然后是我的 src 文件夹

src/jsconfig.json

{
  "typeAcquisition": { "include": ["jest"] }
}
Run Code Online (Sandbox Code Playgroud)

重新启动 VSCode,它按预期工作


Pau*_*ero 7

我自己也面临这个问题。

通常我可以用心输入断言,但是当你确实需要自动完成时,添加

/// <reference types="jest" />
Run Code Online (Sandbox Code Playgroud)

三斜杠指令)在测试套件文件的顶部将为您提供正确的笑话类型。

注意:您还需要@types/jest安装!

具有正确类型引用的 VS Code 对话框


cod*_*der 5

解决方案是为Jest中公开的那些全局变量创建别名 ,并在 JSDoc 中修饰这些变量@typejestGlobals.js因此,我在测试所在的同一目录中创建了一个文件。

jestGlobals.js文件:(为了简单起见,我只包含一个全局变量,但您将对所有全局变量执行相同的操作):

/** @type {jest.Expect} */
// @ts-ignore
let expect = global.expect

export { expect }
Run Code Online (Sandbox Code Playgroud)

然后我只需将这些变量导入我的*.spec.js文件中:

import { expect } from './jestGlobals'
Run Code Online (Sandbox Code Playgroud)

现在,当我使用这个别名时,我得到了正确的智能感知,如下所示: 在此输入图像描述