у меня есть эта функция
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()))
}
и это тест, в котором я пытаюсь проверить сценарий, когда searchTerm пуст. Я хочу проверить, есть ли ошибка, когда это происходит
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');
});
});
Но ни один из подходов, которые я видел в документации Jest, не работает.
Ни один из этих трех тестов не работает. В консоли все 3 тоже дают один и тот же результат
В документации указано You must wrap the code in a function, otherwise the error will not be caught and the assertion will fail.
Кроме того, вы можете комбинировать второй и третий тесты, используя toThrowError
.
Поэтому вы должны изменить синтаксис логики кода на следующий:
expect(() => {filterByTerm(input, '')}).toThrow();
expect(() => {filterByTerm(input, '')}).toThrowError(new Error('Search term can not be empty'));
Ссылка на документацию здесь
Я бы порекомендовал разделить
expect
на отдельные уникальные тесты, потому что трудно увидеть, какой из трех вызывает сбой.