我想用Jest测试一个简单的功能:
// src > filterByTerm.js
function filterByTerm(inputArr, searchTerm) {
if (!searchTerm) throw Error("searchTerm cannot be empty");
if (!inputArr.length) throw Error("inputArr cannot be empty"); // new line
const regex = new RegExp(searchTerm, "i");
return inputArr.filter(function(arrayElement) {
return arrayElement.url.match(regex);
});
}
module.exports = filterByTerm;
// filterByTerm.spec.js
const filterByTerm = require("../src/filterByTerm");
describe("Filter function", () => {
test("it should output error", () => {
const input = [
{ id: 1, url: "https://www.url1.dev" },
{ id: 2, url: "https://www.url2.dev" },
{ id: 3, url: "https://www.link3.dev" }
];
expect(filterByTerm(input, "")).toThrowError();
});
});
我的问题是,为什么这个测试没有通过?如何从Jest中捕获错误?
谢谢
答案 0 :(得分:1)
尝试将您的期望函数包装在另一个函数调用中:
代替:
Error: This expression has type unit but an expression was expected of type 'a list
试试:
expect(filterByTerm(input, "")).toThrowError(errorMessage);
其中 errorMessage 是您抛出的任何错误。
答案 1 :(得分:0)
我相信您应该
if (!searchTerm) throw new Error("searchTerm cannot be empty");
和
expect(filterByTerm(input, "")).toThrowError("searchTerm cannot be empty");
您可以进一步阅读here。
答案 2 :(得分:0)
您需要更改功能,所以尝试这样的事情;
const output = [{id: 3, url: "https://www.link3.dev"}];
expect(() => {
input('');
}).toThrow(Error);
并为此更改功能;
if (!searchTerm) throw Error("searchTerm cannot be empty");
if (!inputArr.length) throw Error("inputArr cannot be empty");