0

getBoundingClientRect使用&简单地滚动到 Element 函数window.scrollTo,但无法获得 Jest 测试的任何迭代来获得超出branch: 100. 所有其他测试覆盖率为 0。

待测功能:

export default function scrollToEl(el) {
  let elRect = el.getBoundingClientRect();
  return window.scrollTo(
    elRect.left + document.documentElement.scrollLeft,
    elRect.top + document.documentElement.scrollTop
  );
}

不能在所有类别中提供 100% 覆盖率的 Jest 测试:

import * as scroll from "../scrollToEl";

describe("scrollToEl test", () => {
  let element;
  let ev = jest.fn();
  scroll.scrollToEl = jest.fn(() => {
    ev;
  });
  beforeEach(() => {
    element = document.createElement("div");
  });
  it("should be called", () => {
    ev(element)
    expect(ev).toHaveBeenCalled();
  });
});

如何获得全面 100% 的全面覆盖?请帮忙。

编辑 - 现在全面覆盖 100%: 在此处输入图像描述

JS函数:

我不得不export default function改变export const scrollToEl = function (el)

export const scrollToEl = function (el) {
  // ...
};

测试:

我必须简化测试以获得全面的 100% 覆盖率。我添加并检查了window.scrollTo在新创建的元素上调用实际函数的同时(el)

import * as scroll from "../scrollToEl";

describe("scrollToEl test", () => {
  beforeEach(() => {
    window.scrollTo = jest.fn();
  });
  it("`window.scrollTo` should be called", () => {
    const el = document.createElement("span");
    scroll.scrollToEl(el);
    expect(window.scrollTo).toHaveBeenCalled();
  });
});
4

1 回答 1

2

所以,首先我对你想要 100% 代码覆盖率的目标有疑问。但这不是关于那个的问题,所以我们现在将跳过它。

为了让 Jest 不抱怨scrollTo,你必须嘲笑它​​。

window.scrollTo = jest.fn();
于 2021-03-20T01:30:00.660 回答