创建CLI时,我想测试一下我的功能。为此,我使用模块child_process。
const path = require('path');
const { execFile } = require('child_process');
describe('cli test', () => {
test('thing', () => {
const myCli = execFile(
`${path.resolve(__dirname, '..')}/cli.js`, ['--foo', 'Bar'],
(err, stdout, stderr) => {
if (err) {
console.log('err: ', err);
}
});
});
但这会产生以下错误:
Attempted to log "err: { Error: spawn /projects/cli/src/cli.js EACCES
at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
at onErrorNT (internal/child_process.js:415:16)
at process._tickCallback (internal/process/next_tick.js:63:19)
errno: 'EACCES',
code: 'EACCES',
通过以下命令直接在终端中运行此脚本:$ node cli.js --foo Bar
完美运行。
现在建议chmod +x <file>
对该文件(源)。但是测试也应该在CI上以及在拉动Git存储库的另一台计算机上进行。
任何想法?
我建议使用fork
而不是execFile
。
该
child_process.fork()
方法是特例,child_process.spawn()
专门用于生成新的Node.js进程。
这将允许您执行JS文件,而无需将它们变成Shell可执行文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句