单元测试JavaScript中可能的无限循环

时间:2013-12-20 00:19:01

标签: javascript unit-testing qunit

我有一个这样的功能:

function someFunction(...){
  ...
  var remaining = somePositiveValue
  while(--remaining){/*ajax stuff*/}
  ...
  return deferredObject;
}

基本上它会在代码中提前加载初始数据。 somePositiveValue取自该数据并被送入此功能。如上所示,该值控制循环。现在假设somePositiveValue由于服务器部分的一些不可预见的错误而被返回为0。代码将无限地中断和循环。尽管如此,很容易追加> 0

但在此之前,如何测试函数是否进入无限循环?如何在单元测试中失败?我顺便使用QUnit。单元测试是正确的方式还是有另一种方式?

2 个答案:

答案 0 :(得分:1)

如果剩下的剩余可能为零,请将其递减:

while (remaining--)

如果剩余可能是-ve开始做比较而不是隐式布尔值:

while (--remaining > 0)

答案 1 :(得分:0)

如果您正在测试可能变成无限循环的代码,您可以随时强制QUnit停止等待。 例如,在测试结束时添加此行:

asyncTest( "Test that might infinitly loop ", function( assert ) {
    // Your test
    // ...

    // Force stop after 2 secondes
    setTimeout(start, 2000); // QUnit < 2.x
});