marko/packages/runtime-class/test/__util__/async-test-suite.js

57 lines
1.8 KiB
JavaScript

module.exports = function addAsyncTestSuites(name, fn) {
var originalDescribe = global.describe;
var originalIt = global.it;
// Trick mocha into running the before hook without any tests.
var runner = describe(name, () => {
it(""); // Executes the before even though there are not tests yet.
before(function () {
// Test init can take a while. (This does not change the timeout of the actual tests, just the lasso compile time).
this.timeout(20000);
// Remove empty test inserted above.
runner.tests.splice(0, 1);
// patch describe to add to the current suite
var patchedDescribe = (global.describe = function (name, fn) {
return moveSuite(originalDescribe(name, fn), runner);
});
patchedDescribe.only = function (name, fn) {
return moveSuite(originalDescribe.only(name, fn), runner);
};
patchedDescribe.skip = function (name, fn) {
return moveSuite(originalDescribe.skip(name, fn), runner);
};
// patch it to add to the current suite
var patchedIt = (global.it = function (name, fn) {
return moveTest(originalIt(name, fn), runner);
});
patchedIt.only = function (name, fn) {
return moveTest(originalIt.only(name, fn), runner);
};
patchedIt.skip = function (name, fn) {
return moveTest(originalIt.skip(name, fn), runner);
};
return fn();
});
after(function () {
// restore the previous describe
global.describe = originalDescribe;
});
});
};
function moveSuite(suite, newParent) {
var oldSuites = suite.parent.suites;
newParent.addSuite(suite);
oldSuites.splice(oldSuites.indexOf(suite), 1);
return suite;
}
function moveTest(test, newParent) {
newParent.addTest(test);
return test;
}