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%的。谢谢你,错过这个我觉得很傻,但我一辈子都看不到。