VSCode 无法识别开玩笑的自定义匹配器
Posted
技术标签:
【中文标题】VSCode 无法识别开玩笑的自定义匹配器【英文标题】:VSCode does not recognize jest custom matcher 【发布时间】:2021-09-29 22:35:16 【问题描述】:我目前正在努力使 Jest 自定义匹配器在 VSCode 中使用 typescript 工作。
我编写了一个自定义匹配器文件,如下所示(为简洁起见,我简化了测试):
export
declare global
namespace jest
interface Matchers<R, T = >
toSucceed(): R
function toSucceed(this: jest.MatcherContext, received: Result<any>): any
return
pass: true,
message: () => 'Custom matcher message',
expect.extend(
toSucceed,
)
我在jest.config.ts
的标签setupFilesAfterEnv
下包含了这个文件路径。
然后我写了这样的测试:
it('should pass', () =>
expect(foo()).toSucced()
)
所有这些配置都可以正常工作,但我仍然收到 VSCode 内联错误:
Property 'toSucceed' does not exist on type 'JestMatchers<any>'
JestMatchers
是 @types/jest
根内的类型定义,因为它是我无法直接扩充的类型。
有没有人遇到过类似的问题?
【问题讨论】:
【参考方案1】:当“接口匹配器”的命名空间声明不正确时,我遇到了类似的错误消息。修复该问题后,jestMatchers 中也出现了一个自定义匹配器。 Matchers 和 jestMatchers 是相连的。
你的代码对我来说很好——除了未定义的Result<any>
——所以你可以尝试直接在测试中导入,看看Visual Studio Code是否能理解声明:
import "./toSucceed";
如果直接导入对您有用,我猜想帮助 Visual Studio Code 理解 jest.config
的 jest 扩展存在问题。
【讨论】:
使用 ``` import "./toSucceed" `` 来移除 VSCode 错误。但我仍然无法让 VSCode 自动检测类型。【参考方案2】:您是否记得将类型定义添加到您的 tsconfig 中?
对我来说,当我将类型定义放在根级别的 d.ts 文件中,并将该路径添加到我的 tsconfig 中的“包含”选项时,它工作正常:
// Some other config
"include": [
"custom-matchers.d.ts"
]
尚未专门使用您的自定义匹配器进行测试,但我遇到了类似的问题,我已经解决了这样的问题。
所以您的 custom-matchers.d.ts 将是:
export
declare global
namespace jest
interface Matchers<R, T = >
toSucceed(): R
【讨论】:
奥斯卡,抱歉耽搁了。你是对的,将“d.ts”文件添加到根级别我可以摆脱 VSCode 警告。我在我的“src/types”目录中将它与我的类型定义的其余部分一起添加,虽然它适用于 Jest,但显然它不适用于 VSCode。以上是关于VSCode 无法识别开玩笑的自定义匹配器的主要内容,如果未能解决你的问题,请参考以下文章
Blackberry Bold - 无法识别 URL 甚至注册的自定义模式
React 包装器:React 无法识别 DOM 元素上的 `staticContext` 道具