2 changed files with 156 additions and 0 deletions
@ -0,0 +1,134 @@ |
|||
/* |
|||
* Simple stupid implementation of mocha test runner. |
|||
* It is used to run tests direclty from node. |
|||
* Can be used for debugging purpose |
|||
* |
|||
* By Harish.K<harish2704@gmail.com> |
|||
*/ |
|||
|
|||
/* |
|||
* TODO: beforeEach hook is not implemented. |
|||
* only 'before' and 'after' hook is implemented |
|||
*/ |
|||
|
|||
|
|||
/* Don't do anything if we are in Mocha's environment */ |
|||
if( global.describe ){ return; } |
|||
|
|||
|
|||
|
|||
var async = require('async'); |
|||
|
|||
|
|||
var printer = function(prefix){ |
|||
return function(){ |
|||
var args = [].slice.call(arguments); |
|||
args[0] = prefix + args[0]; |
|||
console.log.apply(console, args ); |
|||
}; |
|||
}; |
|||
|
|||
|
|||
function runner( d, cb ){ |
|||
var print = printer( d.indent ); |
|||
cb = cb||function(){}; |
|||
print( 'Describe: ', d.name ); |
|||
|
|||
return async.series([ |
|||
|
|||
/* First before hook */ |
|||
function(cb){ |
|||
if(!d.before){ return cb(); } |
|||
print( ' Before hook' ); |
|||
return d.before(cb); |
|||
}, |
|||
|
|||
/* Then each It functions */ |
|||
function(cb){ |
|||
async.eachSeries(d.its, |
|||
function(itItem, cb ){ |
|||
|
|||
// Check whether it is 'IT' item or 'DESCRIBE' item
|
|||
if( itItem.its ){ |
|||
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(); |
|||
}, cb ); |
|||
}, |
|||
|
|||
/* Then after hook */ |
|||
function(cb){ |
|||
if(!d.after){ return cb(); } |
|||
print( ' After hook' ); |
|||
return d.after(cb); |
|||
}, |
|||
|
|||
], function(err){ |
|||
print( 'Finished with ' + ( err? '': 'No' ) + ' Error' ); |
|||
if(err){ |
|||
print( 'Error ', err.stack ); |
|||
} |
|||
return cb(); |
|||
}); |
|||
} |
|||
|
|||
|
|||
var store = { |
|||
currentDescribe: null, |
|||
}; |
|||
|
|||
|
|||
var describe = function(str, fn ){ |
|||
var parentDesc = store.currentDescribe; |
|||
var descItem = { |
|||
name: str, |
|||
its: [], |
|||
indent: ' ' + ( parentDesc? parentDesc.indent : '' ), |
|||
}; |
|||
store.currentDescribe = descItem; |
|||
|
|||
fn(); |
|||
|
|||
if( parentDesc ){ |
|||
parentDesc.its.push( descItem ); |
|||
store.currentDescribe = parentDesc; |
|||
} else { |
|||
runner(descItem); |
|||
} |
|||
}; |
|||
|
|||
|
|||
|
|||
var it = function( str, fn ){ |
|||
|
|||
store.currentDescribe.its.push({ |
|||
name : str, |
|||
fn: fn |
|||
}); |
|||
}; |
|||
it.skip = function(){}; |
|||
|
|||
|
|||
var before = function( fn ){ |
|||
store.currentDescribe.before = fn; |
|||
}; |
|||
|
|||
|
|||
var after = function( fn ){ |
|||
store.currentDescribe.after = fn; |
|||
}; |
|||
|
|||
|
|||
global.after = after; |
|||
global.describe = describe; |
|||
global.it = it; |
|||
global.before = before; |
|||
global.runner = runner; |
|||
|
@ -0,0 +1,22 @@ |
|||
{ |
|||
"name": "simple-mocha", |
|||
"version": "0.0.1", |
|||
"description": "Simple stupid implementation of Mocha test runner. Tests can be run directly within node as any Nodejs code.", |
|||
"author": "Harish.K<harish2704@gmail.com>", |
|||
"license": "MIT", |
|||
"keywords": [ |
|||
"mocha", |
|||
"test runner", |
|||
"testing" |
|||
], |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git@github.com:harish2704/simple-mocha.git" |
|||
}, |
|||
"main": "./index.js", |
|||
"dependencies": { |
|||
"async": "~1.2.1" |
|||
}, |
|||
"devDependencies": {}, |
|||
"scripts": {} |
|||
} |
Loading…
Reference in new issue