Можно ли проверить последовательность асинхронных вызовов функций с помощью DOH

Я пытаюсь использовать doh.Deferred, чтобы написать тест, который будет проверять следующую последовательность событий:

  1. логин с пользователем A (асинхронный)
  2. выходить из системы (синхронно)
  3. логин с пользователем A (асинхронный)

Возвращаемое значение второй функции обратного вызова - это еще один объект doh.Deferred. У меня создалось впечатление, что цепочка обратного вызова d будет ждать d2, но это не так. Тест заканчивается до вызова d2.callback.

Где я здесь не так?

Кто-нибудь знает, как лучше мне проверить это поведение?

function test() {
    var d = new doh.Deferred();

    d.addCallback(function() {  
        Comm.logout(); /* synchronus */
        try {   
            // check with doh.t and doh.is
            return true;
        } catch (e) {
            d.errback(e);
        }
    });

    d.addCallback(function() {
        var d2 = new dojo.Deferred();
        /* asynchronus - third parameter is a callback */
        Comm.login('alex', 'asdf', function(result, msg) {
                try {
                    // check with doh.t and doh.is
                    d2.callback(true);
                } catch (e) {
                    d2.errback(e);
                }                   
            });
        return d2; // returning doh.Defferred -- expect d to wait for d2.callback
    });     

    /* asynchronus - third parameter is a callback */
    Comm.login('larry', '123', function (result, msg) {
        try {
            // check with doh.t and doh.is 
            d.callback(true);
        } catch (e) {
            d.errback(e);
        }
    }); 

    return d;
}

javascript,testing,dojo,doh,

0

Ответов: 1


0 принят

Это работает. Проблема d2 была проблемой.

function test() {
    var d = new doh.Deferred();
    var d2 = new doh.Deferred();

    d.addCallback(function() {  
        Comm.logout(); /* synchronus */
        try {   
                // check with doh.t and doh.is
                return true;
        } catch (e) {
                d.errback(e);
        }
    });

    d.addCallback(function() {
        /* asynchronus - third parameter is a callback */
        Comm.login('alex', 'asdf', function(result, msg) {
                        try {
                                // check with doh.t and doh.is
                                d2.callback(true);
                        } catch (e) {
                                d2.errback(e);
                        }                                       
                });
        return d2; // returning doh.Deferred -- waits for d2.callback
    });         

    /* asynchronus - third parameter is a callback */
    Comm.login('larry', '123', function (result, msg) {
        try {
                // check with doh.t and doh.is 
                d.callback(true);
        } catch (e) {
                d.errback(e);
        }
    }); 

    return d;
}
JavaScript, тестирование, додзё, DOH,
Похожие вопросы
Яндекс.Метрика