如何编写具有异步设置和拆卸操作的测试
How can I write tests that have setup and teardown operations that are asynchronous?
我正在使用一个库(pouchDB(来执行一些异步操作。为了简单起见,我将不涉及细节,因为我认为这是涉及异步操作的"单元测试"的一个常见问题(用引号进行单元测试,因为如果我正在测试与另一个库的集成,我想这不是真正的单元测试。但是,使用QUnit似乎是为其编写测试的最合适的方式(。
我正在使用QUnit来进行js单元测试。我有两个测试。我发现,如果我跑其中一个(同时让另一个被评论掉(,它们就会通过。如果我把它们两个一起跑,跑第二个的就会失败。第二个似乎在第一个的拆卸完成之前运行,这会阻止第二个的设置成功完成。
module("pouchDB integration specs", {
setup: function(){
//some setup stuff
}
},
teardown: function(){
//some teardown stuff
});
}
});
asyncTest("test1", 1, function(){
test1MethodBeingTested();
document.addEventListener("completedTest1Stuff", function(){
deepEqual(newFriendSchedule, 'new', "Test 1 Looks Good'");
start();
});
});
});
asyncTest("test2", 2, function(){
stuffBeingTestedForTest2();
document.addEventListener("test 2 stuff done", function(){
deepEqual(expectedTest2Result, actualTest1Result, "test 2 looks good!");
start();
})
});
(为垃圾缩进道歉。无论我怎么挣扎,SO的编辑都不喜欢我(
我看了Martin Fowler对测试异步代码的看法,但我从中得出的结论是"你应该设计你的代码,使其不本质上是异步的。"这没有帮助,因为我正在测试与一个库的集成,我不想修改这个库(我也不认为我应该修改这个库-这个问题以前肯定已经处理过了?(
与测试方法类似,您可以在拆卸代码中使用stop
和start
来暂停测试运行程序,直到清理代码完成(asyncTest
对stop
进行隐式调用(。QUnit为stop
/start
调用使用计数信号量,因此如果有多个异步任务,则可以多次调用stop
。
快速示例:
var teardownDone = false;
var tests = 0;
var testContent = function() {
if (tests > 0) {
QUnit.ok(teardownDone);
} else {
QUnit.ok(true);
tests++;
}
};
module('example', {
teardown: function () {
// Without this call and the subsequent start(), tests will fail.
stop();
setTimeout(function () {
teardownDone = true;
start();
}, 1000);
}
});
test('test1', testContent);
test('test2', testContent);
JSFiddle
相关文章:
- 无法在Redux中测试异步操作
- 当我在异步操作Redux上开始单元测试时,没有定义错误承诺
- 我们可以使用Jasmine在测试中执行异步操作吗
- 如何为异步递归操作编写 vows js bdd 测试
- 如何访问另一个 HTML 页面的 DOM,以测试 QUnit 的 DOM 操作函数
- 在 Redux 操作中测试副作用
- 被测方法出现在单元测试中,而不是出现在操作中
- 如何在Rails4中测试json格式的操作
- Javascript:基准测试以获得PC的每秒操作能力
- Redux异步操作测试的目的是什么
- 测试一个多维数组内的操作是否匹配一个数字
- 如何对异步Redux操作进行单元测试以模拟ajax响应
- 无法使用javascript在Selenium WebDriver测试中执行HTML5拖放操作
- 在测试列表操作之外使用断言库
- 如何对DOM操作进行单元测试(使用jasmine)
- 如何(自动地)测试浏览器重新绘制后是否发生了操作
- 操作和测试的隔离
- 测试一个Node.js函数,该函数的返回值可以根据执行异步操作的时刻而改变
- 如何处理单元测试中的嵌套异步操作
- 如何编写具有异步设置和拆卸操作的测试