mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
60 lines
2.0 KiB
JavaScript
60 lines
2.0 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 run_id = LocalCollection.uuid();
|
|
var local_complete = false;
|
|
var remote_complete = false;
|
|
var done = false;
|
|
|
|
var maybeDone = function () {
|
|
if (!done && local_complete && remote_complete) {
|
|
done = true;
|
|
onComplete && onComplete();
|
|
}
|
|
}
|
|
|
|
Meteor._runTests(onReport, function () {
|
|
local_complete = true;
|
|
maybeDone();
|
|
});
|
|
|
|
Meteor.call('tinytest/run', run_id, function (error, result) {
|
|
if (error)
|
|
// XXX better report error
|
|
throw new Error("Test server returned an error");
|
|
});
|
|
|
|
Meteor.default_connection.onQuiesce(function () {
|
|
// XXX use _.defer to avoid calling into minimongo
|
|
// reentrantly. we need to handle this better..
|
|
// (XXX code got refactored -- still necessary?)
|
|
_.defer(function () {
|
|
// XXX this is a really sloppy way to GC the test results
|
|
|
|
// XXX huge mess. have to use onQuiesce (supposed to be
|
|
// private/for testing only) because otherwise we might start
|
|
// removing the results before they've actually all arrived at
|
|
// the client, since methods can complete before subs
|
|
// update. or, could use the complete:true hack from before..
|
|
Meteor._ServerTestResults.remove({run_id: run_id});
|
|
|
|
// and of course we shouldn't print "All tests pass!"
|
|
// until we have actually received the test results :)
|
|
remote_complete = true;
|
|
maybeDone();
|
|
});
|
|
});
|
|
|
|
var sub_handle = Meteor.subscribe('tinytest/results', run_id);
|
|
var query_handle = Meteor._ServerTestResults.find().observe({
|
|
added: function (doc) {
|
|
_.each(doc.report.events || [], function (event) {
|
|
delete event.cookie; // can't debug a server test on the client..
|
|
});
|
|
doc.report.server = true;
|
|
onReport(doc.report);
|
|
}
|
|
});
|
|
};
|