测试涉及打开 folder/workspace 的 VSCode 扩展

Testing a VSCode extension that involves opening a folder/workspace

我正在开发一个 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);
})

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

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

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

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

"args": ["file or folder name", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ]

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

目前我一直在使用的 替代方案 正在使用具有以下内容的 bash 脚本

#!/bin/bash

# [=11=] = command itself
#  = extension-directory(relative path)
#  = process-id of code to kill

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

cd 
vsce package
file=$(find . -name "*.vsix")
code --install-extension $file
code &
echo $!

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

也可以使用VSBrowser.instance.openResources(路径)在[=19=中打开一个workspace/folder ]实例;

import { WebDriver, VSBrowser } from 'vscode-extension-tester';
import path = require('path');
...

suite('Sample Test suite XYZ', () => {
    const test_project_path = path.join(__dirname, "path", "to", "prj");
    
    setup(async () => {
        driver = VSBrowser.instance.driver;
        driver.manage().timeouts().implicitlyWait(1000);
    });

    test("Open a workspace in VSCode instance", async () => {
        await VSBrowser.instance.openResources(path.resolve(test_project_path));
    });

});

...