我可以用 Jasmine 测试 setInterval 吗?

Can I test setInterval with Jasmine?

我的代码中有这个语句,我想知道如何使用 Jasmine 测试 setInterval。

const x = setInterval(() => {
    const countdown = getElementById('countdownWrapper');
    const systemTime = ...
    const now = new Date().getTime();
    const endTime = systemTime - now;

    countdown.querySelector('.countdown-time').innerHTML = time();

    if (endTime < 0) {
        clearInterval(x);
        countdown.classList.remove('countdown-time--show');
    }
}, 1000);

系统时间是从 HTML.

中数据内容属性中的纪元值提供的

如有任何帮助,我们将不胜感激

beforeEach(function() {
  timerCallback = jasmine.createSpyObj("setInterval");
  jasmine.clock().install();
});

afterEach(function() {
  jasmine.clock().uninstall();
});

it("causes a timeout to be called", function() {
  setTimeout(function() {
    timerCallback();
  }, 1000);

  expect(setInterval).not.toHaveBeenCalled();

  jasmine.clock().tick(1001);

  expect(setInterval).toHaveBeenCalled();
});

更正 Benny 的回答:

timerCallback = jasmine.createSpyObj("test", {setInterval: 0});
AND
expect(timerCallback.setInterval).not.toHaveBeenCalled();

另外,这并没有测试 setInterval,它在这里被嘲笑了。这测试 setTimeout!