mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
57 lines
1.8 KiB
JavaScript
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;
|
|
}
|