VSCode 扩展测试:在测试中使用 `vscode.executeDefinitionProvider`

VSCode extension testing: Use `vscode.executeDefinitionProvider` in test

背景

我正在尝试自动测试我的 VSCode 扩展程序。该扩展适用于 python 个文件,并在其上使用 vscode.executeDefinitionProvidervscode.executeDocumentSymbolProvider

问题

vscode.executeDefinitionProvider总是returns[],vscode.executeDocumentSymbolProvider总是returnsundefined.

备注

当 运行 在扩展的调试会话(无测试会话)中使用相同的代码时,命令可以完美运行。

我确保扩展在测试期间可用,甚至用

手动激活它们
let ext = vscode.extensions.getExtension("ms-python.python");
assert.notStrictEqual (ext, undefined);
await ext?.activate ();
ext = vscode.extensions.getExtension("ms-python.vscode-pylance");
assert.notStrictEqual (ext, undefined);
await ext?.activate ();

问题

如何让命令在自动化测试期间成功。

编辑:解决方法

显然 VSCode 需要时间来 真正激活 扩展。我可以在 return new Promise((c, e) => {.

之前在 index.ts::run () 中放置一个 await sleep (10000);

虽然这有效,但它是一个非常不稳定的解决方法,有没有什么方法可以让代码等待整个环境完全加载?

Extension<T>::activate(): Thenable<T>

Returns: Thenable<T> - A promise that will resolve when this extension has been activated.

await ext?.activate();

最后没有什么能真正稳定地为我工作,所以我求助于以下(非常好用)的解决方案。

我的自动测试 运行 来自生产环境,就像任何其他扩展一样。

  • package.json我创建了一个新命令_test。
  • 命令会 运行 ./test/suite/index.ts : run().