I have this function
const filterByTerm = (inputArr, searchTerm) => {
if(!searchTerm) throw new Error('Search term can not be empty');
if(!inputArr.length) throw new Error('Input array term can not be empty');
return inputArr.filter((el) => el.url.match(searchTerm.toLowerCase()))
}
and this is a test where I’m trying to test scnario when the searchTerm is empty. I want to test if there is an Error when it’s happening
describe('Filter function', () => {
it('Should filter by a search term (link)', () => {
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 output2 = [
{ id: 1, url: 'https://www.url1.dev' },
{ id: 2, url: 'https://www.url2.dev' }
]
expect(filterByTerm(input, '')).toThrow();
expect(filterByTerm(input, '')).toThrow(Error);
expect(filterByTerm(input, '')).toThrow('Search term can not be empty');
});
});
But none of the approaches I saw in Jest documentation is not working.
>Solution :
Documentation states You must wrap the code in a function, otherwise the error will not be caught and the assertion will fail. Additionally you can combine the second and third tests by using toThrowError.
So you should change your code logic syntax to the following:
expect(() => {filterByTerm(input, '')}).toThrow();
expect(() => {filterByTerm(input, '')}).toThrowError(new Error('Search term can not be empty'));
Link to Documentation here