我在我的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。对此问题的任何建议/解决方案?
感谢。
答案 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。我没试过。