- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试向我正在开发的 Visual Studio Code 扩展添加一些单元测试。我遵循了此处描述的设置扩展测试的方法:https://code.visualstudio.com/api/working-with-extensions/testing-extension
然而,这个秘籍并没有展示任何有用的东西来实际测试一个扩展,只是设置框架。
对于我想做的测试,我想做的第一件事就是 打开示例项目 .这就是我陷入困境的地方。这是只是众多变化中的一种 我试过打开一个项目文件夹:
import assert from 'assert';
import { after, before, it } from 'mocha';
import path from 'path';
import { commands, Extension, extensions, Uri, window } from 'vscode';
suite('Extension Tests', () => {
let extension: Extension<any>;
const projectFolder = Uri.file(path.join(__dirname, '../../../test/suite/sample-project'));
window.showInformationMessage('Start all tests.');
before(() => {
extension = extensions.getExtension('kshetline.ligatures-limited');
const cmd = commands.executeCommand('vscode.openFolder', projectFolder).then(
() => console.log('opened'),
() => console.log('didn\'t open'));
console.log('before');
return cmd;
});
after(() => {
console.log('after');
});
it('should load and activate extension', () => {
assert.ok(extension);
assert.ok(extension.isActive);
});
it('second test', () => {
assert.ok(true);
});
});
executeCommand
,两个测试都运行并且测试套件正确终止,测试窗口关闭。
executeCommand
在,有时两个测试都没有执行,有时只是第一个测试。测试套件不会终止——测试窗口保持打开状态,我必须手动停止测试。
before
功能async
, 和 await
ing executeCommand
. done
参数,适用于 async
和非异步,并调用 done()
末before
函数,或在 then
executeCommand
的条款 promise 。 executeCommand
promise 。 最佳答案
不幸的是,当您打开或关闭文件夹时,vscode 会重新加载窗口。这意味着扩展主机将重新启动并失去与调试器以及当前运行的测试脚本的连接。这就是为什么您的 before
函数永远不会返回并且您的测试在中途中止。
有一个open issue在这种行为上,虽然与测试无关。
窗口重新加载的原因是,切换工作区可能会改变vscode环境。设置可能会被覆盖,工作区信任更改,正在运行的扩展的整个状态和缓存无效,并且可能会激活不同的扩展。不幸的是,这不会重新加载 --extensionTestsPath
传递给 vscode 的测试,当您的测试代码触发窗口或扩展主机重新加载时,最有可能防止无限循环。
在问题得到解决之前,您在启动时打开文件夹的方法是正确的。虽然,如果你只是在做 Unit Tests
您可以只打开单个文件并直接调用您的命令/事件使用的函数。如果您正在执行端到端或类似用户的测试并拥有与工作区相关的 activationEvents
,您可能无法打开文件夹。
我找不到任何确认它的文档,但根据我的经验,默认情况下您的扩展是启用的,您可以直接调用任何命令,因此通常不需要打开工作区。
关于测试文档,我强烈建议遵循 guides on the vscode website .当您使用 yeoman
引导您的扩展时按照那里的建议,您已经设置了一个测试运行程序,包括一些示例代码。它还会生成 launch.json
可用于调试您的测试。
有关更多示例,请查看 vscode 的内置扩展(例如 TypeScript Language Features )或一些 microsofts own extensions .其中大多数包括具有不同复杂性的测试。您可能会找到最适合您的设置的一种。
示例:使用 runTest
来自 vscode-test
runTest
vscode 中的函数接受多个选项,包括您在 launch.json
中使用的参数。 :
# From the typings of vscode-test
interface TestOptions {
...,
/**
* Absolute path to the extension root. Passed to `--extensionDevelopmentPath`.
* Must include a `package.json` Extension Manifest.
*/
extensionDevelopmentPath: string;
/**
* Absolute path to the extension tests runner. Passed to `--extensionTestsPath`.
* Can be either a file path or a directory path that contains an `index.js`.
* Must export a `run` function of the following signature:
*
* ```ts
* function run(): Promise<void>;
* ```
*
* When running the extension test, the Extension Development Host will call this function
* that runs the test suite. This function should throws an error if any test fails.
*
*/
extensionTestsPath: string;
/**
* A list of launch arguments passed to VS Code executable, in addition to `--extensionDevelopmentPath`
* and `--extensionTestsPath` which are provided by `extensionDevelopmentPath` and `extensionTestsPath`
* options.
*
* If the first argument is a path to a file/folder/workspace, the launched VS Code instance
* will open it.
*
* See `code --help` for possible arguments.
*/
launchArgs?: string[];
}
编辑
src/test/runTest.ts
应该相当容易脚手架使用
yeoman
加载多个工作区并在其中运行特定测试。
const workspaceTests = [
{ testDir: '../your/tests', workspaceDir: '../your/workspace' },
...
]
async function main() {
try {
const extensionDevelopmentPath = path.resolve(__dirname, '../../');
for (const { testDir, workspaceDir } of workspaceTests) {
const extensionTestsPath = path.resolve(__dirname, testDir);
const workspacePath = path.resolve(__dirname, workspaceDir);
// Run tests in the specified workspace
await runTests({
extensionDevelopmentPath,
extensionTestsPath,
launchArgs: [ workspacePath ]
});
}
} catch (err) {
console.error('Failed to run tests');
process.exit(1);
}
}
关于typescript - VSCode : Tests won't proceed after using executeCommand to open a sample project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61889998/
我是一名优秀的程序员,十分优秀!