Browse Source

* Refactor.

* Features:
	* collect execution time,
	* handle errors

Signed-off-by: Harish.K <harish2704@gmail.com>
refactor
Harish.K 10 years ago
parent
commit
9dcf02dcfb
  1. 88
      index.js

88
index.js

@ -19,19 +19,60 @@ if( global.describe ){ return; }
var async = require('async'); var async = require('async');
function padding( str, width ){
return ( ' ' + str ).slice(-width);
}
function Task(name, fn, parentNode ){
this.parentNode = parentNode;
this.name = name;
this.fn = fn;
this.isAsync = fn && fn.length;
}
var printer = function(prefix){
return function(){
var args = [].slice.call(arguments);
args[0] = prefix + args[0];
console.log.apply(console, args );
Task.prototype.exec = function(_cb){
if( !this.fn ){ return _cb(); }
var _this = this;
var cb = function(err){
_this.endTime = Date.now();
if( err ){
_this.err = err;
_this.parentNode.errorCount++;
}
_this.print();
_cb();
}; };
this.startTime = Date.now();
if( this.isAsync ){
return this.fn(cb);
}
try{
this.fn();
cb();
} catch(e){
cb(e);
}
return;
};
Task.prototype.print = function(){
var timeTaken = this.endTime - this.startTime;
console.log(
this.parentNode.indent +
' It: ' +
( this.err? 'Fail ' : ' OK ' )+
padding( '(' + timeTaken + 'ms) ' , 11) +
this.name
);
}; };
function runner( d, cb ){ function runner( d, cb ){
var print = printer( d.indent );
cb = cb||function(){}; cb = cb||function(){};
console.log('');
print( 'Describe: ', d.name ); print( 'Describe: ', d.name );
return async.series([ return async.series([
@ -52,14 +93,8 @@ function runner( d, cb ){
if( itItem.its ){ if( itItem.its ){
return runner(itItem, cb); return runner(itItem, cb);
} }
print( ' It: ' + itItem.name );
if( !itItem.fn ){ return cb(); }
if( itItem.fn.length ){ return itItem.fn(cb); }
itItem.fn();
return cb();
return itItem.exec(cb);
}, cb ); }, cb );
}, },
@ -70,11 +105,11 @@ function runner( d, cb ){
return d.after(cb); return d.after(cb);
}, },
], function(err){
print( 'Finished with ' + ( err? '': 'No' ) + ' Error' );
if(err){
print( 'Error ', err.stack );
], function(){
if( d.parentNode ){
d.parentNode.errorCount += d.errorCount;
} }
print( 'Finished with ' + ( d.errorCount || 'No' ) + ' Error' );
return cb(); return cb();
}); });
} }
@ -86,19 +121,21 @@ var store = {
var describe = function(str, fn ){ var describe = function(str, fn ){
var parentDesc = store.currentDescribe;
var parentNode = store.currentDescribe;
var descItem = { var descItem = {
name: str, name: str,
its: [], its: [],
indent: ' ' + ( parentDesc? parentDesc.indent : '' ),
indent: ' ' + ( parentNode? parentNode.indent : '' ),
errorCount: 0,
parentNode: parentNode,
}; };
store.currentDescribe = descItem; store.currentDescribe = descItem;
fn(); fn();
if( parentDesc ){
parentDesc.its.push( descItem );
store.currentDescribe = parentDesc;
if( parentNode ){
parentNode.its.push( descItem );
store.currentDescribe = parentNode;
} else { } else {
runner(descItem); runner(descItem);
} }
@ -107,11 +144,8 @@ var describe = function(str, fn ){
var it = function( str, fn ){ var it = function( str, fn ){
store.currentDescribe.its.push({
name : str,
fn: fn
});
var task = new Task(str, fn, store.currentDescribe );
store.currentDescribe.its.push( task );
}; };
it.skip = function(){}; it.skip = function(){};

Loading…
Cancel
Save