VS Code Jest和Cypress intellisense无法与Chai一起正常使用

时间:2019-04-19 17:34:29

标签: visual-studio-code jestjs intellisense cypress

我使用Jest作为单元测试框架,并且下面的intellisense是正确的:

enter image description here

但是,当我安装赛普拉斯"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断言库。安装赛普拉斯后的Intellisense:

enter image description here

有没有一种方法可以告诉VS Code在特定文件夹中使用哪个Chai智能感知?还是有某种方法可以在jsconfig.json文件中指定它?

3 个答案:

答案 0 :(得分:2)

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

jestGlobals.js文件:(为简单起见,我仅包含一个全局变量,但对所有全局变量都做同样的事情):

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

export { expect }

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

import { expect } from './jestGlobals'

现在,当我使用此别名时,我得到了正确的智能感知,如下所示: enter image description here

答案 1 :(得分:1)

我自己也面对这个问题。

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

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

(A triple-slash directive)在测试套件文件的顶部,将为您提供正确的笑话类型。

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

VS Code dialog with proper type reference

答案 2 :(得分:0)

柏树和开玩笑也有同样的问题。

我通过创建两个jsconfig.json解决了它

cypress / jsconfig.json

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

然后是我的src文件夹中的一个

src / jsconfig.json

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

重新启动VSCode并按预期工作