Как я могу выполнить тест DOH синхронно?
Кто-нибудь может мне помочь в поиске решения этой проблемы. У меня есть (предположим) 3 дох функции, первая из которых асинхронная, а остальные синхронные. Я должен сделать асинхронную функцию, которая будет вызвана первой, и результат этой функции будет передан другим двум функциям, возможно ли это?
Пример:
doh.register(".....", [
{
name : "asyncFunction",
runTest : function(){
function callback(result){
//How to pass the result to fun_2 and fun_3
//also fun_2 or fun_3 should be deferred until this function executes
}
}
},
function fun_2(result){
//doh.assertTrue(.....);
},
function fun_3(result){
//doh.assertTrue(.....);
}
Любая помощь будет отличной.
1 ответ
Похоже, ваша первая функция - это в основном функция настройки для других тестов.
Это возможно сделать - в основном, используя Deferreds / Promises, но это немного странно, и вы можете быть сильно утомлены таймаутами теста.
Итак, вот что делает установку с небольшим количеством асинхронного кода, который занимает 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
функция для возврата отложенного, но doh не поддерживает это прямо сейчас (по состоянию на v1.7.2).