我正在尝试运行Jest测试的类。该类(不是测试)使用内部间隔。我正在尝试使用我在测试中创建的某些方法来测试它,如下所示:
create view vw as select
a,
b,
iif(c = 1, null, c) as c,
coalesce(d, a) as d
from tbl
但是,似乎没有执行与类本身的间隔。我放了一些console.logs,发现它确实到达了设置间隔的代码点:
const syncWait = ms =>
{
const end = Date.now() + ms;
while (Date.now() < end) continue;
};
let myObj = new MyClass(); //the constructor starts the interval
syncWait(5500);
expect(...
但是,即使间隔时间过去了,它也根本不会执行。为什么会这样?
答案 0 :(得分:0)
因此出于某种原因,用笑话来检查时间将无法正常工作,因此您必须模拟时间的流逝。
您这样做:
在测试的第一行,我添加了这一行:
jest.useFakeTimers();
笑话对象不需要导入。在笑话测试中会自动提供该功能。这条线表示我们没有使用实际时间,而是为我们提供了模拟(模拟)时间流逝的选项。
在类的代码中,我有一行调用例如setInterval(action, 3000)
,在测试中,我们将调用:
jest.advanceTimersByTime(3000);
然后才实际调用间隔的action
。
答案 1 :(得分:0)
使用jest.runOnlyPendingTimers()
也可以解决此问题,假设您不关心特定时间,只希望运行当前计划的回调。