如何模拟Node.js的child_process产卵function?

有没有简单的方法来模拟Node.js的child_process spawn函数?

我有如下的代码,并希望在unit testing中进行testing,而不必依靠实际的工具调用:

 var output; var spawn = require('child_process').spawn; var command = spawn('foo', ['get']); command.stdout.on('data', function (data) { output = data; }); command.stdout.on('end', function () { if (output) { callback(null, true); } else { callback(null, false); } }); 

有一个(certificate和维护)的库,允许我嘲笑spawn电话,让我指定模拟电话的输出?

我不想依靠工具或操作系统来保持testing的简单和隔离。 我希望能够运行testing,而不必设置复杂的testing夹具,这可能意味着很多工作(包括更改系统configuration)。

是否有捷径可寻?

我find了模拟衍生图书馆,这几乎是我想要的。 它允许模拟spawn呼叫,并提供预期的结果回到调用testing。

一个例子:

 var mockSpawn = require('mock-spawn'); var mySpawn = mockSpawn(); require('child_process').spawn = mySpawn; mySpawn.setDefault(mySpawn.simple(1 /* exit code */, 'hello world' /* stdout */)); 

更高级的例子可以在项目页面find。

你可以使用sinon.stubs sinon stubs guide

 // i like the sandbox, or you can use sinon itself let sandbox = sinon.sandbox.create(); let spawnEvent = new events.EventEmitter(); spawnEvent.stdout = new events.EventEmitter(); sandbox.stub(child_process, 'spawn').returns(spawnEvent); // and emit your event spawnEvent.stdout.emit('data', 'hello world'); console.log(output) // hello world