在继续Javascript函数之前强制DOM更改(用于测试目的)

时间:2015-03-06 21:34:00

标签: javascript jquery asynchronous

我试图编写一些javascript单元测试(使用QUnit)。特别是,我想测试各种用户操作,我在jQueryUI中使用jQuery.simulate()(我认为)。

当然,问题是这些更改/事件在函数结束后发生,因为Javascript是单线程的。

$("#myTextBox").focus().is(":focus") // returns false;

所以,我一直在做的事情(我知道这是一个非常难看的解决方案)是通过一系列Promises和setTimeout()运行我的测试:

var giveItASec = function () {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve();
        });
    });
}

test("My test", function (assert) {
    var done = assert.async();
    Promise.resolve().then(function () {
        // do some assertions
        // DOM Manipulation
        return giveItASec();
    }).then(function () { 
        // more assertions about the DOM
        // repeat pattern as needed

        done();
    });
});

所有嵌套的匿名函数让我头疼,更不用说真正降低生产力,仅仅是因为大量输入。

javascript中确实必须有更好的异步到同步模式,对吧?请?

0 个答案:

没有答案