我正在尝试为VS Code扩展编写一些测试。
该扩展程序基本上使用ShellExecution
创建一些任务,以运行本地可执行文件,例如:
new Task(
definition,
folder,
name,
source,
new ShellExecution('./runme', { cwd })
);
我希望能够测试Shell进程,但是无法访问此进程,因此无法附加到任何输出流,也无法获取退出代码。
在测试中,我将像这样执行任务:await vscode.tasks.executeTask(task);
成功运行,而不管ShellExecution
创建的进程的退出代码如何。
有什么方法可以访问执行任务所生成的子进程?
答案 0 :(得分:1)
使用Node.js'child_process
,这很容易做到。我将其用于run an external Java jar并捕获其输出以获取错误。主要部分是:
let java = child_process.spawn("java", parameters, spawnOptions);
let buffer = "";
java.stderr.on("data", (data) => {
let text = data.toString();
if (text.startsWith("Picked up _JAVA_OPTIONS:")) {
let endOfInfo = text.indexOf("\n");
if (endOfInfo == -1) {
text = "";
} else {
text = text.substr(endOfInfo + 1, text.length);
}
}
if (text.length > 0) {
buffer += "\n" + text;
}
});
java.on("close", (code) => {
let parser = new ErrorParser(dependencies);
if (parser.convertErrorsToDiagnostics(buffer)) {
thisRef.setupInterpreters(options.outputDir);
resolve(fileList);
} else {
reject(buffer); // Treat this as non-grammar error (e.g. Java exception).
}
});