Comparing version 1.0.5 to 1.0.6
81
index.js
@@ -15,2 +15,3 @@ var chalk = require('chalk'); | ||
/** | ||
@@ -20,2 +21,3 @@ * Main test function | ||
function test (message, testFunction) { | ||
//if run in exclusive mode - allow only `test.only` calls | ||
if (test.ONLY) return test; | ||
@@ -31,3 +33,4 @@ | ||
indent: tests.length, | ||
parent: tests[tests.length - 1] | ||
parent: tests[tests.length - 1], | ||
status: null | ||
}; | ||
@@ -41,6 +44,2 @@ | ||
//append current test to the chain | ||
tests.push(testObj); | ||
//handle args | ||
@@ -50,3 +49,5 @@ if (!testFunction) { | ||
if (typeof message === 'string') { | ||
end(testObj); | ||
testObj.status = 'skip'; | ||
testObj.promise = Promise.resolve(); | ||
printFirstLevel(testObj); | ||
return test; | ||
@@ -64,25 +65,37 @@ } | ||
//save test to the chain | ||
tests.push(testObj); | ||
//exec test | ||
try { | ||
testObj.time = now(); | ||
testFunction.call(testObj); | ||
testObj.time = now() - testObj.time; | ||
var isAsync = testFunction.length; | ||
//update status | ||
testObj.success = true; | ||
} catch (e) { | ||
//set parents status to error happened in nested test | ||
if (tests.length) { | ||
for (var i = tests.length; i--;) { | ||
tests[i].error = true; | ||
//exec sync test | ||
if (!isAsync) { | ||
try { | ||
testObj.time = now(); | ||
testFunction.call(testObj); | ||
testObj.time = now() - testObj.time; | ||
if (!testObj.status) testObj.status = 'success'; | ||
} catch (e) { | ||
//set parents status to error happened in nested test | ||
var parent = testObj.parent; | ||
while (parent) { | ||
parent.status = 'warning'; | ||
parent = parent.parent; | ||
} | ||
//update test status | ||
testObj.status = 'error'; | ||
testObj.error = e; | ||
} | ||
//update test status | ||
testObj.error = e; | ||
printFirstLevel(testObj); | ||
testObj.promise = Promise.resolve(); | ||
} | ||
end(testObj); | ||
//remove test from the chain | ||
tests.pop(); | ||
return test; | ||
@@ -92,12 +105,2 @@ } | ||
//test ender - prints logs, if needed | ||
function end (testObj) { | ||
tests.pop(); | ||
//if first level finished - log resolved tests | ||
if (!tests.length) { | ||
print(testObj); | ||
} | ||
} | ||
//return indentation of a number | ||
@@ -112,3 +115,8 @@ function indent (number) { | ||
//print only 1st level guys | ||
function printFirstLevel (test) { | ||
if (!test.parent) print(test); | ||
} | ||
//universal printer dependent on resolved test | ||
@@ -118,12 +126,12 @@ function print (test) { | ||
if (test.error instanceof Error) { | ||
if (test.status === 'error') { | ||
printError(test); | ||
} | ||
else if (test.error) { | ||
else if (test.status === 'warning') { | ||
printWarn(test, single); | ||
} | ||
else if (test.success) { | ||
else if (test.status === 'success') { | ||
printSuccess(test, single); | ||
} | ||
else { | ||
else if (test.status === 'skip') { | ||
printSkip(test, single); | ||
@@ -141,2 +149,3 @@ } | ||
//print pure red error | ||
@@ -147,3 +156,3 @@ function printError (test) { | ||
console.group('%c× ' + test.title, 'color: red; font-weight: normal'); | ||
if (test.error && test.error !== true) { | ||
if (test.error) { | ||
console.error(test.error); | ||
@@ -150,0 +159,0 @@ } |
{ | ||
"name": "tst", | ||
"version": "1.0.5", | ||
"version": "1.0.6", | ||
"description": "Minimalistic test runner for node/browser", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
7252
168