Похоже, ваша первая функция - это в основном функция настройки для других тестов.
Это возможно сделать - в основном, используя Отложенные / обещания, но это немного странно, и вы можете быть сильно утомлены таймаутами теста.
Итак, вот что делает установку с небольшим количеством асинхронного кода, который занимает 2 секунды. Все тесты становятся асинхронными тестами, которые выполняют свою работу после завершения отложенной настройки.
Поскольку ваши «последующие» тесты стали асинхронными, вам необходимо убедиться, что их таймауты соответствуют времени, которое займет ваша асинхронная установка (по крайней мере, для первого, который будет выполнен).
// Some asynchronous initialization that takes 2s
setTimeout(function() {
setupCompletion.resolve({ result: 42 });
}, 2000);
doh.register("my.test1", [
{
name: "waits for async setup to complete",
timeout: 5000,
runTest: function() {
var d = new doh.Deferred();
setupCompletion.then(function (res) {
doh.is(42, res.result);
d.callback(true);
});
return d;
}
},
{
name: "also waits for async setup to complete",
timeout: 5000,
runTest: function() {
var d = new doh.Deferred();
setupCompletion.then(function (res) {
doh.is(43, res.result + 1);
d.callback(true);
});
return d;
}
}
]);
Конечно, было бы неплохо, если бы можно было организовать функцию setUp
теста, чтобы она возвращала Deferred, но doh не поддерживает это сейчас (с v1.7.2).