diff --git a/packages/test-server-tests-in-console-once/.gitignore b/packages/test-server-tests-in-console-once/.gitignore new file mode 100644 index 0000000000..677a6fc263 --- /dev/null +++ b/packages/test-server-tests-in-console-once/.gitignore @@ -0,0 +1 @@ +.build* diff --git a/packages/test-server-tests-in-console-once/package.js b/packages/test-server-tests-in-console-once/package.js new file mode 100644 index 0000000000..1e694f670b --- /dev/null +++ b/packages/test-server-tests-in-console-once/package.js @@ -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"); +}); diff --git a/packages/test-server-tests-in-console-once/server.js b/packages/test-server-tests-in-console-once/server.js new file mode 100644 index 0000000000..02bbbbf749 --- /dev/null +++ b/packages/test-server-tests-in-console-once/server.js @@ -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); + }); +});