问题单元测试Javascript中的setInterval函数

时间:2009-11-16 00:25:53

标签: javascript unit-testing

我在我的Javascript文件中测试window.setInterval函数时遇到了困难。下面是场景......基本上我在一个我想测试的函数中有一个setInterval函数:

var dummy = false; // global variable not set anywhere else
var INTERVAL_TIME = 20; // global variable not set anywhere else
function myFunction() 
{
    var id = window.setInterval(function() {
        if (...)
        {
            window.clearInterval(id);
        }
        else
        {
            if(...)
            {
                dummy = true;
            }
        }
    }, INTERVAL_TIME);
}

我在JsTestDriver中有以下测试代码:

TestMyFunction.prototype.test_myFunction() {
    myFunction();
    assertTrue(dummy);
}    

每次测试执行时,它都会失败,并且表示dummy为false,就好像从未调用过整个setInterval函数一样。我试着玩这个间隔没有成功。如果我在else子句中发出警告,它会在几分之一秒内弹出并消失(测试仍然失败)。

代码有效。我觉得这是一个计时问题,测试比setInterval函数更早完成,因此抱怨dummy没有设置为true。对此问题的任何建议/解决方案?

感谢。

4 个答案:

答案 0 :(得分:1)

为什么不在测试中放置一个setTimeout,以便在25ms之后延迟检查dummy的值。

答案 1 :(得分:1)

我使用JsUnitMockTimeout.js来模拟setInterval函数。它像宝石一样工作:)

答案 2 :(得分:0)

答案 3 :(得分:0)

似乎是"JsTestDriver cannot perform asynchronous testing"。我用于异步支持的唯一JS单元测试框架工作是Qunit

Qunit有asyncTest,可以使用ajax或超时。

PS:有一个全新的JS测试框架Evidence。我没试过。