如何模拟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