【发布时间】:2013-06-08 13:33:17
【问题描述】:
我将QUnit 与require.js 结合使用来对backbone.js 应用程序进行单元测试。所有测试都是异步的,使用asyncTest 方法。
我正在使用setup 和teardown 为每个测试构建和删除一个夹具。我的问题是,虽然asyncTest 似乎是阻塞的,但setup() 在每个测试开始之前都会被调用,几乎所有setup() 调用都会同时运行。 This solution 似乎无法解决我的问题。下面我有一个如何设置模块的示例,这里有一个指向test repository that illustrates the problem的链接
我的问题是:我做错了什么还是这个 QUnit 的正常行为?
module('Module', {
setup: function(){
console.log('setup');
},
teardown: function(){
console.log('teardown');
}
})
asyncTest('Test 1', function() {
setTimeout(function(){
equal(2, 2, 'The return should be 2.');
start();
}, 400);
});
asyncTest('Test 2', function() {
setTimeout(function(){
equal(1, 1, 'The return should be 1.');
start();
}, 400);
});
【问题讨论】:
-
你应该看看Sinon。值得花一些时间学习它,对异步测试很有帮助。
-
@gustavohenke 你指的是 sinon 的哪一部分?我看过它,但只是因为它是嘲笑、存根、监视的东西。
-
当你需要处理时间问题时,fake timers 很方便:)
-
对了。为简洁起见,我使用 setTimeout 来代替我的 AJAX 回调。因此,恐怕替换 setTimeout 不是正确的解决方案。考虑到这一点,你有什么别的想法吗?
-
Sinon 还可以伪造 XMLHttpRequest 甚至是带有路由和自定义标头/状态码的完整服务器。您将永远不再需要信任您的服务器来测试 AJAX :)
标签: javascript unit-testing qunit