Files
meteor/packages/tinytest/tinytest_client.js
David Glasser cd250f0945 tinytest: drop results for a run when requested by client, not onComplete.
Should be useful for a non-browser-based test runner.
2012-12-12 12:55:44 -08:00

50 lines
1.4 KiB
JavaScript

// Like Meteor._runTests, but runs the tests on both the client and
// the server. Sets a 'server' flag on test results that came from the
// server.
Meteor._runTestsEverywhere = function (onReport, onComplete) {
var runId = LocalCollection.uuid();
var localComplete = false;
var remoteComplete = false;
var done = false;
var maybeDone = function () {
if (!done && localComplete && remoteComplete) {
done = true;
onComplete && onComplete();
}
};
Meteor._runTests(onReport, function () {
localComplete = true;
maybeDone();
});
Meteor.default_connection.registerStore(Meteor._ServerTestResultsCollection, {
update: function (msg) {
// We only should call _runTestsEverywhere once per client-page-load, so
// we really only should see one runId here.
if (msg.id !== runId)
return;
_.each(msg.set, function (report) {
_.each(report.events, function (event) {
delete event.cookie; // can't debug a server test on the client..
});
report.server = true;
onReport(report);
});
}
});
var handle = Meteor.subscribe(Meteor._ServerTestResultsSubscription, runId);
Meteor.call('tinytest/run', runId, function (error, result) {
if (error)
// XXX better report error
throw new Error("Test server returned an error");
remoteComplete = true;
handle.stop();
Meteor.call('tinytest/clearResults', runId);
maybeDone();
});
};