new test driver package: runs server tests, exits

This commit is contained in:
David Glasser
2014-06-12 12:15:07 -07:00
parent 663de9c75c
commit 5fd8dbaeaa
3 changed files with 91 additions and 0 deletions

View File

@@ -0,0 +1 @@
.build*

View File

@@ -0,0 +1,12 @@
Package.describe({
name: 'test-server-tests-in-console-once',
summary: "Run server tests noninteractively, with results going to the console.",
version: '1.0.0',
internal: true
});
Package.on_use(function (api) {
api.use(['tinytest', 'underscore', 'ejson'], 'server');
api.add_files(['server.js'], "server");
});

View File

@@ -0,0 +1,78 @@
var passed = 0;
var failed = 0;
var expected = 0;
var resultSet = {};
var getName = function (result) {
return result.groupPath.join(" - ") + " - " + result.test;
};
Meteor.startup(function () {
console.log("running server-side tests");
Tinytest._runTests(function (results) {
var name = getName(results);
if (!_.has(resultSet, name)) {
var testPath = EJSON.clone(results.groupPath);
testPath.push(results.test);
resultSet[name] = {
name: name,
status: "PENDING",
events: [],
testPath: testPath
};
}
_.each(results.events, function (event) {
resultSet[name].events.push(event);
switch (event.type) {
case "ok":
break;
case "expected_fail":
if (resultSet[name].status !== "FAIL")
resultSet[name].status = "EXPECTED";
break;
case "exception":
console.log(name, ":", "!!!!!!!!! FAIL !!!!!!!!!!!");
if (event.details && event.details.stack)
console.log(event.details.stack);
else
console.log("Test failed with exception");
failed++;
break;
case "finish":
switch (resultSet[name].status) {
case "OK":
break;
case "PENDING":
resultSet[name].status = "OK";
console.log(name, ":", "OK");
passed++;
break;
case "EXPECTED":
console.log(name, ":", "EXPECTED FAILURE");
expected++;
break;
case "FAIL":
failed++;
console.log(name, ":", "!!!!!!!!! FAIL !!!!!!!!!!!");
console.log(JSON.stringify(resultSet[name].info));
break;
default:
console.log(name, ": unknown state for the test to be in");
}
break;
default:
resultSet[name].status = "FAIL";
resultSet[name].info = results;
break;
}
});
}, function () {
if (failed > 0) {
console.log("~~~~~~~ THERE ARE FAILURES ~~~~~~~");
}
console.log("passed/expected/failed/total",
passed, "/", expected, "/", failed, "/", _.size(resultSet));
process.exit(failed ? 1 : 0);
});
});