使用qUnit,如果在测试中有异步代码,我知道如何使用asyncTest()
,但是如果您有一个包含异步代码的函数呢?测试包含异步代码的函数
换句话说,异步请求不在测试范围内,而仅仅是正在测试的代码的一部分。
就拿这个代码:
function makeAjaxCall(){
$.get('/mypage', {}, function(data){
// Do something with `data`
},'json');
}
我怎么能说一个测试中makeAjaxCall()
,然后运行对从Ajax请求返回的data
测试?
这个答案似乎应该工作,但如果异步事件不是ajax请求呢?我唯一的选择是否会从回调中手动进行事件触发? – twiz 2013-03-28 04:34:58
我这么认为。你需要在异步进程中有一些钩子并确定它已经完成。我不知道任何JavaScript构造都可以为每种类型的异步操作执行此操作。您可以通过重写实现并在幕后执行一些魔术来显然创建自己的像window.setTimeout这样的众所周知的实例,但可以说更容易进行回调。 $ .Deferred可以帮助实现清洁。 – syazdani 2013-03-28 13:50:43