From 87e06e1b1c188df7ffb1b43a76530c20020d7b20 Mon Sep 17 00:00:00 2001 From: dead-horse Date: Sun, 5 May 2013 00:37:40 +0800 Subject: [PATCH 1/2] add support for spawn --- lib/mm.js | 22 +++++++++++++++++++++- test/mm.test.js | 28 +++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/lib/mm.js b/lib/mm.js index 1f6aeee..3f7142f 100644 --- a/lib/mm.js +++ b/lib/mm.js @@ -14,7 +14,8 @@ var EventEmitter = require('events').EventEmitter; var muk = require('muk'); var http = require('http'); var https = require('https'); - +var cp = require('child_process'); +var EventEmitter = require('events').EventEmitter; exports = module.exports = function mock(obj, key, method) { return muk.apply(null, arguments); @@ -305,6 +306,25 @@ function _requestError(mod, url, reqError, resError, delay) { return this; } +/** + * mock child_process spawn + * @param {Integer} code exit code + * @param {String} stdout + * @param {String} stderr + * @param {Integer} timeout stdout/stderr/close event emit timeout + */ +exports.spawn = function (code, stdout, stderr, timeout) { + var evt = new EventEmitter(); + muk(cp, 'spawn', function () { + return evt; + }); + setTimeout(function () { + evt.emit('stdout', stdout); + evt.emit('stderr', stderr); + evt.emit('close', code); + }, timeout); +}; + /** * remove all mock effects. */ diff --git a/test/mm.test.js b/test/mm.test.js index 67dd568..915caac 100644 --- a/test/mm.test.js +++ b/test/mm.test.js @@ -16,10 +16,10 @@ var fs = require('fs'); var should = require('should'); var http = require('http'); var https = require('https'); +var child_process = require('child_process'); var pedding = require('pedding'); var foo = require('./foo'); - describe('mm.test.js', function () { var port = null; @@ -524,6 +524,32 @@ describe('mm.test.js', function () { }); + describe('spawn', function () { + it('should mm.spawn mock spawn', function (done) { + mm.spawn(1, 'stdout', 'stderr', 100); + var ls = child_process.spawn('ls', ['-a']); + var done = pedding(4, done); + ls.on('stdout', function (data) { + data.should.equal('stdout'); + done(); + }); + ls.on('stderr', function (data) { + data.should.equal('stderr'); + done(); + }); + ls.on('close', function (code) { + code.should.equal(1); + done(); + }); + mm.restore(); + var ls = child_process.spawn('ls', ['-a']); + ls.on('close', function (code) { + code.should.equal(0); + done(); + }); + }); + }); + describe('mm()', function () { it('should mm() just like muk()', function (done) { mm(fs, 'readFile', function (filename, callback) { From b90710a6291148dbcc106953483784a85e53a170 Mon Sep 17 00:00:00 2001 From: dead-horse Date: Sun, 5 May 2013 13:50:45 +0800 Subject: [PATCH 2/2] do not emit when null --- lib/mm.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mm.js b/lib/mm.js index 3f7142f..acc5580 100644 --- a/lib/mm.js +++ b/lib/mm.js @@ -319,8 +319,8 @@ exports.spawn = function (code, stdout, stderr, timeout) { return evt; }); setTimeout(function () { - evt.emit('stdout', stdout); - evt.emit('stderr', stderr); + stdout && evt.emit('stdout', stdout); + stderr && evt.emit('stderr', stderr); evt.emit('close', code); }, timeout); };