Javascript Jest覆盖率不计入在覆盖率中抛出错误

Javascript Jest覆盖率不计入在覆盖率中抛出错误,javascript,jestjs,Javascript,Jestjs,我遵循一个简单的笑话教程。我有一个函数如下所示: function filterByTerm(inputArr, searchTerm) { if (!inputArr.length) throw Error("input array cannot be empty"); if (searchTerm) { const regex = new RegExp(searchTerm, "i"); return inputAr

我遵循一个简单的笑话教程。我有一个函数如下所示:

function filterByTerm(inputArr, searchTerm) {
  if (!inputArr.length) throw Error("input array cannot be empty");
    if (searchTerm) {
      const regex = new RegExp(searchTerm, "i");
      return inputArr.filter(function (arrayElement) {
        return arrayElement.url.match(regex);
      });
    }
    return [];
}

module.exports = filterByTerm;
const filterByTerm = require("../src/filterByTerm");

describe("Filter function", () => {
  const input = [
    { id: 1, url: "https://www.url1.dev" },
    { id: 2, url: "https://www.url2.dev" },
    { id: 3, url: "https://www.link3.dev" },
  ];

  const output = [{ id: 3, url: "https://www.link3.dev" }];

  const urlOutput = [
    { id: 1, url: "https://www.url1.dev" },
    { id: 2, url: "https://www.url2.dev" },
  ];
  test("It should filter by a search term (link)", () => {
    expect(filterByTerm(input, "link")).toEqual(output);

    expect(filterByTerm(input, "LINK")).toEqual(output);
  });

  test("It should filter by a search term (uRl)", () => {
    expect(filterByTerm(input, "uRl")).toEqual(urlOutput);
  });

  test("It should not return anything on an empty search term", () => {
    expect(filterByTerm(input, "")).toEqual([]);
  });

  test("An empty input array should trigger an error", () => {
    expect(() =>
      filterByTerm([], "link").toThrowError(
        new Error("input array cannot be empty")
      )
    );
  });

  test("No inputs should throw a new error", () => {
    expect(() =>
      filterByTerm().toThrowError(new Error("input array cannot be empty"))
    );
  });

});
还有一个jest测试套件,如下所示:

function filterByTerm(inputArr, searchTerm) {
  if (!inputArr.length) throw Error("input array cannot be empty");
    if (searchTerm) {
      const regex = new RegExp(searchTerm, "i");
      return inputArr.filter(function (arrayElement) {
        return arrayElement.url.match(regex);
      });
    }
    return [];
}

module.exports = filterByTerm;
const filterByTerm = require("../src/filterByTerm");

describe("Filter function", () => {
  const input = [
    { id: 1, url: "https://www.url1.dev" },
    { id: 2, url: "https://www.url2.dev" },
    { id: 3, url: "https://www.link3.dev" },
  ];

  const output = [{ id: 3, url: "https://www.link3.dev" }];

  const urlOutput = [
    { id: 1, url: "https://www.url1.dev" },
    { id: 2, url: "https://www.url2.dev" },
  ];
  test("It should filter by a search term (link)", () => {
    expect(filterByTerm(input, "link")).toEqual(output);

    expect(filterByTerm(input, "LINK")).toEqual(output);
  });

  test("It should filter by a search term (uRl)", () => {
    expect(filterByTerm(input, "uRl")).toEqual(urlOutput);
  });

  test("It should not return anything on an empty search term", () => {
    expect(filterByTerm(input, "")).toEqual([]);
  });

  test("An empty input array should trigger an error", () => {
    expect(() =>
      filterByTerm([], "link").toThrowError(
        new Error("input array cannot be empty")
      )
    );
  });

  test("No inputs should throw a new error", () => {
    expect(() =>
      filterByTerm().toThrowError(new Error("input array cannot be empty"))
    );
  });

});
当我运行我的测试时,它们都报告通过了,但是当我查看覆盖率时,我发现就Jest而言,我的filter by term函数的第2行没有被覆盖

我的理解是,最后两个测试用例(“空输入数组应该触发错误”和“没有输入应该抛出新错误”)应该测试filterByTerm的第2行,因为它们都预期它抛出的错误,但情况似乎并非如此


为什么玩笑不认为这句话是“被掩盖的”?我应该怎么做才能正确地覆盖它?

您的呼叫不正确。应根据
expect
调用的结果调用该方法。请将此作为第二次到最后一次测试的示例:

test(“空输入数组应触发错误”,()=>{
预期(()=>filterByTerm([],“链接”)。TothRower错误(
新错误(“输入数组不能为空”)
);
});

我已经测试过Jest在调用
.tothRower()

后报告了100%的测试覆盖率,这是100%的。谢谢你,错过这个我觉得很傻,但我一辈子都看不到。