如何使用 Node JS 子进程 Exec 在 Windows 上触发错误
How to Trigger Error On Windows With Node JS Child Process Exec
我正在构建一个跨平台节点实用程序来读取文件系统(设备、分区)的详细信息,并且在我的测试中,我需要测试该实用程序运行以获取的外壳命令抛出错误时的行为它的数据。
遗憾的是我对dos或PowerShell知之甚少,我不知道如何编写一个抛出错误并退出的批处理命令。
如何批量抛出错误,让子进程能够捕捉到?
这是供您 fiddle 使用的示例代码:
import os from 'os';
import child from 'child_process';
import { expect } from 'chai';
const cmd = os.platform() === 'win32'
// This command should result in throwing an error to exec
? `1>&2 echo 'Echoed Error'\nexit /b 1`
// This has the expected behaviour on linux and osx
: `>&2 echo 'Echoed Error'; exit 1`;
expect(child.execSync.bind(child, cmd)).to.throw();
child.exec(cmd, (err) => {
expect(err).to.be.an.instanceof(Error);
});
我找到了一个导致cmd出错的方法,就是调用一个不存在的外部或内部命令。因此,像 error
或 iamnotanexistingcommand
这样的命令将引发错误,这足以满足我要重现的内容。
我正在构建一个跨平台节点实用程序来读取文件系统(设备、分区)的详细信息,并且在我的测试中,我需要测试该实用程序运行以获取的外壳命令抛出错误时的行为它的数据。
遗憾的是我对dos或PowerShell知之甚少,我不知道如何编写一个抛出错误并退出的批处理命令。
如何批量抛出错误,让子进程能够捕捉到?
这是供您 fiddle 使用的示例代码:
import os from 'os';
import child from 'child_process';
import { expect } from 'chai';
const cmd = os.platform() === 'win32'
// This command should result in throwing an error to exec
? `1>&2 echo 'Echoed Error'\nexit /b 1`
// This has the expected behaviour on linux and osx
: `>&2 echo 'Echoed Error'; exit 1`;
expect(child.execSync.bind(child, cmd)).to.throw();
child.exec(cmd, (err) => {
expect(err).to.be.an.instanceof(Error);
});
我找到了一个导致cmd出错的方法,就是调用一个不存在的外部或内部命令。因此,像 error
或 iamnotanexistingcommand
这样的命令将引发错误,这足以满足我要重现的内容。