如何测试异步回调
How do I test an asynchronous callback?
我正在测试一个异步回调,方法是检查它是否在m
秒内被调用了n
次。
到目前为止,这是我的代码:
test("async callback", function() {
expect(1);
var called = 0;
var callback = function() {called++;};
var model = new Model(callback);
model.startCallbacks();
function theTest() { // call this a few seconds later and verify
model.stopCallbacks(); // that the callback has been called n times
equal(3, called, "number of times callback was called");
}
setTimeout(theTest, 10000); // wait about 10 seconds until calling theTest
});
(model.startCallbacks
和model.stopCallbacks
是用setInterval
实现的。)
这行不通。我认为这是因为当callback
仍在异步执行时,执行在测试函数结束时停止。
我要测试的内容:model
正在正确调用callback
。我该怎么做?
// use asyncTest instead of test
asyncTest("async callback", function() {
expect(1);
var called = 0;
var callback = function() {called++;};
var model = new Model(callback);
model.startCallbacks();
function theTest() { // call this a few seconds later and verify
model.stopCallbacks(); // that the callback has been called
equal(3, called, "number of times callback was called");
// THIS IS KEY: it "restarts" the test runner, saying
// "OK I'm done waiting on async stuff, continue running tests"
start();
}
setTimeout(theTest, 10000); // wait about 10 seconds until calling theTest
});
您应该使用异步测试的启动和停止函数(请参阅文档),例如:
test("a test", function() {
stop();
$.getJSON("/someurl", function(result) {
equal(result.value, "someExpectedValue");
start();
});
});
你的例子是:
test("async callback", function() {
stop(1);
var called = 0;
var callback = function() {called++;};
var model = new Model(callback);
model.startCallbacks();
function theTest() { // call this a few seconds later and verify
model.stopCallbacks(); // that the callback has been called n times
equal(3, called, "number of times callback was called");
start();
}
setTimeout(theTest, 10000); // wait about 10 seconds until calling theTest
});
您也可以使用快捷方式asyncTest。
相关文章:
- Meteor:异步回调问题
- JavaScript中的异步回调
- 如何将此异步回调转换为生成器
- 在Nodejs中堆叠异步回调事件的最佳方式
- 从异步回调中获取值
- jasmine 2-在jasmine指定的超时时间内未调用异步回调.DEFAULT_TIMEOUT_INTERVAL
- 将数据注入异步回调(使用 node.js)
- 由于异步回调,变量被覆盖
- 管理Meteor中的异步回调
- 如何等到异步回调完成后才能使用检索到的数据
- Node.JS函数返回异步回调函数的值
- 将Node REPL调整为不阻塞异步回调的提示
- 如何正确地将异步回调与react中的表单操作连接起来
- 返回异步回调作为最佳实践
- 使用其他模块中的函数,避免异步回调地狱
- Node.js:异步回调混淆
- JavaScript中的调试技术.异步回调
- Javascript OOP-在异步回调中丢失了这一点
- 在 JavaScript 中的异步回调函数中访问“this”
- 异步回调后返回