【问题标题】:Testing a VSCode extension that involves opening a folder/workspace测试涉及打开文件夹/工作区的 VSCode 扩展
【发布时间】:2019-08-22 16:23:12
【问题描述】:

我正在开发一个 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,测试在我实际测试我的代码之前停止运行。

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

【问题讨论】:

    标签: typescript visual-studio-code vscode-extensions


    【解决方案1】:

    您还可以使用 VSBrowser.instance.openResources(path) 在 VSCode 实例中打开工作区/文件夹;

    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));
        });
    
    });
    
    ...
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      到目前为止,我一直在使用的 alternative 是使用具有以下内容的 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 $!
      

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

      【讨论】:

      • 感谢@ancient child 的回答。该方法基本上有效,但不一致。例如,使用${workspaceFolder} 不起作用,只是在没有打开文件夹的情况下启动扩展开发主机。一些绝对路径有效,但这些对我没有帮助,因为我不能保证测试系统上有任何绝对路径。你能确认一下吗?
      • @MadeOfAir 我正在尝试这样做,但我做不到。我的测试总是从一个空的工作区开始。它还在最新的 vscode 版本上工作吗?
      • 新的文档链接是https://code.visualstudio.com/api/working-with-extensions/testing-extension,它没有提到这个文件夹参数,但它仍然有效(v1.53)
      猜你喜欢
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多