Как я могу выполнить тест DOH синхронно? - PullRequest
0 голосов
/ 29 ноября 2011

Может кто-нибудь помочь мне в поиске решения этой проблемы.У меня есть (предположим) 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 Ответ

2 голосов
/ 08 марта 2012

Похоже, ваша первая функция - это в основном функция настройки для других тестов.

Это возможно сделать - в основном, используя Отложенные / обещания, но это немного странно, и вы можете быть сильно утомлены таймаутами теста.

Итак, вот что делает установку с небольшим количеством асинхронного кода, который занимает 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).

...