javascript - 如何使 QUnit 阻塞直到模块完成?

标签 javascript unit-testing qunit

我正在尝试使用 QUnit 来测试一堆 JavaScript。我的代码看起来像这样:

module("A");
doExpensiveSetupForModuleA();
asyncTest("A.1", testA1);
asyncTest("A.2", testA3);
asyncTest("A.3", testA3);

module("B");
doExpensiveSetupForModuleB();
asyncTest("B.1", testB1);
asyncTest("B.2", testB3);
asyncTest("B.3", testB3);

如果我按原样运行此代码,则 doExpectiveSetupForModuleB() 在异步测试运行时运行,从而导致失败。

如果 doExpectiveSetupForModuleB()testA* 之前运行,那么这些测试要么失败,要么撤消昂贵的设置工作,以便 testB*失败。

有没有办法让 QUnit 阻塞在下一个模块上?或者让它阻止开始新的测试,直到上一个异步测试完成为止?或者我应该使用更好的 JS 测试框架?

注意:我知道我的单元测试并不是完全原子的。我确实有清理代码,有助于确保我不会出现任何脏状态,但是 doExpectiveSetupFor*() 的成本过高,因此在每次测试之前运行它是不现实的。/p>

最佳答案

您可以使用 module lifecycle

function runOnlyOnce(fn) {
    return function () {
        try {
            if (!fn.executed) {
                fn.apply(this, arguments);
            }
        } finally {
            fn.executed = true;
        }
    }
}

// http://api.qunitjs.com/module/
module("B", {
    setup: runOnlyOnce(doExpensiveSetupForModuleB)
});

关于javascript - 如何使 QUnit 阻塞直到模块完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16349104/

相关文章:

javascript - Ember.js:在执行验收测试时消失组件属性

javascript - 使用 document.write 加载不同的 css 样式表时,浏览器无限刷新

javascript - 如何解决 Android Phonegap 应用程序 SyntaxError : Parse error?(黑屏问题)

unit-testing - 使用 Mockito 模拟 Akka Actor 日志对象

javascript - Qunit 触发功能在 JQuery DatePicker 上不起作用

java - 如何从 javascript 调用 struts 1.3 操作

c++ - 谷歌模拟 : Is it ok to use global mock objects?

maven - 有没有办法使用surefire在测试方法级别而不是类级别排除测试?

javascript - 是否可以测试页面上控件的高度和宽度

javascript - QUnit Javascript 单元测试显示断言号而不是测试号