VS Code Jest 和 Cypress intellisense 不能与 Chai 一起正常工作

VS Code Jest and Cypress intellisense doesn't work properly with Chai

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

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

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

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

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

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

export { expect }

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

import { expect } from './jestGlobals'

现在,当我使用这个别名时,我得到了正确的智能感知,如下所示:

我自己也面临这个问题。

通常我可以记住输入断言,但是当你真的需要自动完成时,添加

/// <reference types="jest" />

(A triple-slash directive) 在你的测试套件文件的顶部会给你正确的笑话类型。

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

与 cypress 和 jest 有同样的问题。

我通过创建两个 jsconfig.json

解决了它

cypress/jsconfig.json

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

然后一个用于我的 src 文件夹

src/jsconfig.json

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

重新启动 VSCode 并且按预期工作