我正在尝试使用 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/