如何用Jest测试此功能?

时间:2019-04-15 05:56:11

标签: javascript unit-testing jestjs

我正在尝试对打字机功能进行单元测试,但是无论我做什么,接收到的值都是不确定的。

我查看了Jest文档,也尝试了异步测试,但没有运气。

let speed = 120;

  function typeWriter(id, text) {
    return function () {
      if (text) {
        document.getElementById(id).innerHTML += text[0];
        setTimeout(typeWriter(id, text.slice(1)), speed);
      }
    };
  }
typeWriter("job-title", "Web Developer")();

我希望ID为job-title的元素的innerHTML值成为Web Developer,而不是未定义的

1 个答案:

答案 0 :(得分:1)

您需要像这样使用Jest Timer Mocks

let speed = 120;

function typeWriter(id, text) {
  return function () {
    if (text) {
      document.getElementById(id).innerHTML += text[0];
      setTimeout(typeWriter(id, text.slice(1)), speed);
    }
  };
}

describe('typeWriter', () => {
  beforeEach(() => { jest.useFakeTimers(); });
  afterEach(() => { jest.useRealTimers(); });

  it('should work', () => {
    document.body.innerHTML = '<div><span id="job-title"></span></div>';
    const text = "Web Developer";

    typeWriter("job-title", text)();

    for (let i = 1; i <= text.length; i++) {
      expect(document.getElementById('job-title').innerHTML).toBe(text.substring(0, i));
      jest.advanceTimersByTime(speed);
    }
  });
});
相关问题