测试涉及打开文件夹/工作区的 VSCode 扩展

Mad*_*Air 7 typescript visual-studio-code vscode-extensions

我正在开发一个 VSCode 扩展,它将当前在工作区中打开的文件的路径考虑在内。

因此,为了进行可重现的测试,我尝试在 VSCode 中打开测试文件夹本身,然后打开其中的测试文件,如下所示:

import * as vscode from "vscode";

test("whatever", async function() {
    let workspaceUri = vscode.Uri.file(__dirname);
    // the tests stop here...
    await vscode.commands.executeCommand("vscode.openFolder", workspaceUri);
    await vscode.workspace.openTextDocument(__filename);
})
Run Code Online (Sandbox Code Playgroud)

问题是,当我这样做时,正如可能提到的那样,测试在我实际测试我的代码之前停止运行。

有没有办法可以安全地打开工作区并在测试期间使用它?

anc*_*ild 4

查看测试扩展的 文档: Testing-extensions-docs

在开发中的扩展的.vscode/launch.json文件中,您可以像这样传递参数(来自文档):

"args": ["file or folder name", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ]
Run Code Online (Sandbox Code Playgroud)

因此,您可以创建一个测试目录结构,其中包含您在配置中指定的文件夹中关心的所有文件,并将这些目录/文件添加到您的.vscodeignore(默认测试目录已经在其中)。

到目前为止我一直在使用的替代方案是使用包含以下内容的bash 脚本:

#!/bin/bash

# $0 = command itself
# $1 = extension-directory(relative path)
# $2 = process-id of code to kill

[ -z "$1" ] && { echo "path-argument not supplied"; exit 1; }
[ -z "$2" ] || { xkill -id $2; }

cd $1
vsce package
file=$(find . -name "*.vsix")
code --install-extension $file
code &
echo $!
Run Code Online (Sandbox Code Playgroud)

剩下的就是在启动的代码实例中打开一个文件夹并执行任何有问题的命令。从长远来看,建立适当的测试环境对我来说似乎更有利可图,至少在可以预测必须进行许多测试的情况下是如此。