Comparing version 0.2.1 to 0.2.2
@@ -16,2 +16,3 @@ /** | ||
this.__mockedAsyncFuncs = []; | ||
this.__mockedPromiseFuncs = []; | ||
@@ -32,2 +33,3 @@ return this; | ||
name: funcName, | ||
type: 'callback', | ||
expectedCbArgs: expectedCallbackArgs, | ||
@@ -39,2 +41,13 @@ delay: delay | ||
Mocker.prototype.withPromiseStub = function (funcName, expectedResolveArg, expectedRejectArg, delay) { | ||
this.__mockedPromiseFuncs.push({ | ||
name: funcName, | ||
type: 'promise', | ||
expectedResolveArg: expectedResolveArg, | ||
expectedRejectArg: expectedRejectArg, | ||
delay: delay | ||
}); | ||
return this; | ||
}; | ||
Mocker.prototype.create = function () { | ||
@@ -65,3 +78,3 @@ | ||
}, x.delay) | ||
}else | ||
} else | ||
return cbFunc.apply(undefined, x.expectedCbArgs); | ||
@@ -71,2 +84,33 @@ }; | ||
this.__mockedPromiseFuncs.forEach((x) => { | ||
if (!mock[x.name]) throw new Error('Function not found!'); | ||
mock.recorder[x.name] = { | ||
calls: 0 | ||
}; | ||
mock[x.name] = function () { | ||
console.log('INVOKING', x.name); | ||
mock.recorder[x.name].calls += 1; | ||
if (x.delay != null) { | ||
setTimeout(function () { | ||
return new Promise(function (resolve, reject) { | ||
if (x.expectedRejectArg != null) | ||
return reject(x.expectedRejectArg); | ||
resolve(x.expectedResolveArg); | ||
}); | ||
}, x.delay) | ||
} else | ||
return new Promise(function (resolve, reject) { | ||
if (x.expectedRejectArg != null) | ||
return reject(x.expectedRejectArg); | ||
resolve(x.expectedResolveArg); | ||
}); | ||
}; | ||
}); | ||
this.__mockedSyncFuncs.forEach((x) => { | ||
@@ -73,0 +117,0 @@ if (!mock[x.name]) throw new Error('Function not found!'); |
{ | ||
"name": "mini-mock", | ||
"version": "0.2.1", | ||
"version": "0.2.2", | ||
"description": "An ultra-lightweight mocking framework for Node", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -7,4 +7,5 @@ /** | ||
function Robot(motorFactory) { | ||
function Robot(motorFactory, widgetFactory) { | ||
this.__motorFactory = motorFactory; | ||
this.__widgetFactory = widgetFactory; | ||
} | ||
@@ -17,2 +18,3 @@ | ||
motor.start(function (e, speed) { | ||
if (e) | ||
@@ -23,2 +25,12 @@ return cb(e); | ||
}); | ||
}; | ||
Robot.prototype.talk = function (cb) { | ||
var voiceWidget = this.__widgetFactory.getVoiceWidget(); | ||
voiceWidget.speak() | ||
.then(function (result) { | ||
cb(null, result); | ||
}) | ||
}; |
@@ -9,2 +9,5 @@ /** | ||
var MotorFactory = require('./lib/motor-factory'); | ||
var VoiceWidget = require('./lib/voice-widget'); | ||
var WidgetFactory = require('./lib/widget-factory'); | ||
var Mocker = require('../lib/mocker'); | ||
@@ -33,2 +36,10 @@ | ||
this.__voiceWidget = mocker.mock(VoiceWidget.prototype) | ||
.withPromiseStub('speak', 'Zip zap!', null, null) // promise will resolve with 'Zip zap!' | ||
.create(); | ||
this.__widgetFactory = mocker.mock(WidgetFactory.prototype) | ||
.withSyncStub('getVoiceWidget', this.__voiceWidget) | ||
.create(); | ||
done(); | ||
@@ -52,2 +63,12 @@ }); | ||
it('mock promise function returns correct result', function (done) { | ||
var robot = new Robot(null, this.__widgetFactory); | ||
robot.talk(function (err, result) { | ||
expect(result).to.equal('Zip zap!'); | ||
done(); | ||
}) | ||
}); | ||
it('mock asynchronous function with delay returns correct result', function (done) { | ||
@@ -54,0 +75,0 @@ |
14364
13
256