我使用Jest作为单元测试框架,并且下面的intellisense是正确的:
但是,当我安装赛普拉斯"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:
有没有一种方法可以告诉VS Code在特定文件夹中使用哪个Chai智能感知?还是有某种方法可以在jsconfig.json
文件中指定它?
答案 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'
答案 1 :(得分:1)
我自己也面对这个问题。
通常,我可以凭心输入断言,但是当您确实需要自动完成时,请添加
/// <reference types="jest" />
(A triple-slash directive)在测试套件文件的顶部,将为您提供正确的笑话类型。
注意:您还需要安装@types/jest
!
答案 2 :(得分:0)
柏树和开玩笑也有同样的问题。
我通过创建两个jsconfig.json解决了它
cypress / jsconfig.json
{
"typeAcquisition": { "include": ["cypress"] }
}
然后是我的src文件夹中的一个
src / jsconfig.json
{
"typeAcquisition": { "include": ["jest"] }
}
重新启动VSCode并按预期工作