javascript:如何验证计时器属性?

时间:2010-08-12 15:43:00

标签: javascript unit-testing timeout timer

如果我有以下代码:

var myfunc = function() { alert('wow'); };
var t=setTimeout(myfunc, 300);

我可以使用t中存储的ID来验证计时器的持续时间和回调吗?我正在尝试直接验证计时器的属性,所以我不必实际运行它,直到我的单元测试超时。

2 个答案:

答案 0 :(得分:1)

不,不能做。

你可以做的是用不同的方式跟踪它们,如下所示:

var timeouts = [{
  fn: myfunc,
  timeout: 300
}];

for(var i = 0; i < timeouts.length; i++){
  timeouts[i].id = window.setTimeout(timeouts[i].fn, timeouts[i].timeout);
}

答案 1 :(得分:0)

返回的ID是浏览器的内部ID,因此您无法使用它。但是,既然您在启动计时器时知道持续时间和回调,那么您也可以将整个事情包装在Timer类中,为您完成所有事情:

function Timer(callback, timeout) {
  this.callback = callback;
  this.timeout = timeout;
  this.id = window.setTimeout(callback, timeout);
}

Timer.prototype.cancel = function() {
  window.clearTimeout(this.id);
}

Timer.prototype.fire = function() {
  this.cancel();
  this.callback();
}

然后您只需创建计时器并访问其属性,如下所示:

t = new Timer(myfunc, 300);
alert(t.timeout);