用玩笑测试时setInterval不起作用

我正在尝试运行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(...

但是,即使间隔时间过去了,它也根本不会执行。为什么会这样?

huanchenruomeng 回答:用玩笑测试时setInterval不起作用

因此出于某种原因,用笑话来检查时间将无法正常工作,因此您必须模拟时间的流逝。

您这样做:

在测试的第一行,我添加了这一行:

jest.useFakeTimers();

笑话对象不需要导入。在笑话测试中会自动提供该功能。这条线表示我们没有使用实际时间,而是为我们提供了模拟(模拟)时间流逝的选项。

在类的代码中,我有一行调用例如setInterval(action,3000),在测试中,我们将调用:

jest.advanceTimersByTime(3000);

然后才实际调用间隔的action

,

使用jest.runOnlyPendingTimers()也可以解决此问题,假设您不关心特定时间,只希望运行当前计划的回调。

本文链接:https://www.f2er.com/3160786.html

大家都在问