VS Code Jest和Cypress intellisense无法与Chai正常工作

twh00eeo  于 2023-10-14  发布在  Jest
关注(0)|答案(4)|浏览(139)

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

然而,当我安装Cypress "cypress": "^3.2.0"时,同样的代码现在显示错误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都依赖于ChaiAssert库。安装Cypress后的智能感知:

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

goucqfw6

goucqfw61#

对柏树和笑话也有同样的问题。
我通过创建两个jslog.json
cypress/jsconfig.json

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

然后一个放在src文件夹里
src/jsconfig.json

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

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

jfgube3f

jfgube3f2#

我自己也面对这个问题。
通常我可以把Assert记在心里,但是当你真的需要自动完成时,

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

(三重斜杠指令)将给予正确的jest类型。
注意:您还需要安装@types/jest

sycxhyv7

sycxhyv73#

解决方案是为Jest中公开的全局变量创建别名,并在JSDoc中用@type装饰这些变量。所以,我在我的测试所在的同一个目录下创建了一个文件jestGlobals.js
jestGlobals.js文件:(为了简单起见,我只包含了一个全局变量,但你可以对所有全局变量做同样的事情):

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

export { expect }

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

import { expect } from './jestGlobals'

现在,当我使用这个别名时,我得到了正确的智能,就像这样:

ioekq8ef

ioekq8ef4#

在GitHub上找到了这个答案https://github.com/cypress-io/cypress/issues/22059#issuecomment-1148921141
在tslog.json中将./cypress.config.ts添加到exclude对我来说很有效

相关问题