Когда я писал тестовые примеры, иногда мне казалось, что я часто повторяю тестовый код для разных входных данных, но с теми же тестовыми настройками и одними и теми же утверждениями. Я заметил, что другие студенты пишут тестовые примеры таким же образом. Я читал об «describe.each» в документации по шутке, что помогло сэкономить время и сделать код чище. Теперь нам не нужно повторяться при написании тестов для разных входных данных. Давайте посмотрим на следующий пример.
В этом примере давайте напишем тестовые примеры для чистой функции operate(num1,num2, operation). Функция принимает три параметра — номер один, номер два и арифметическую операцию, которая выполняться с двумя числами. Возвращаемое значение является результатом арифметической операции. Используя «describe», мы можем написать тестовые примеры, например
describe('testing arithmetic functions', () => {
it('testing add arithmetic', () => {
const result = operate('5', '7', '+');
expect(result).toBe('12');
});
it('testing subtract arithmetic', () => {
const result = operate('4', '2', '-');
expect(result).toBe('2');
});
});
Как видите, мы пишем два тестовых примера, но в обоих тестовых случаях настройки теста и утверждения остаются одинаковыми. Изменяются только входы и ожидаемый результат. Этот набор тестов можно переписать с помощью «describe.each», как показано ниже.
const testcases = [['5', '7','+','12'],['4', '2','-','2']];
describe.each(testcases)('testing arithmetic functions',
(no1,no2,operation,expected) => {
it(`testing ${operation} arithmetic`, () => {
const result = operate(no1, no2, operation);
expect(result).toBe(expected);
});
});
Теперь мы можем добавить несколько тестовых случаев в массив testcases и передать их в качестве аргумента в describe.each(). Нам не нужно повторять настройку теста и утверждение для каждого входа.
Короче говоря, describe.each() сэкономит нам время и сделает наш набор тестов чистым. Если вам интересно, ознакомьтесь с документацией jest, чтобы найти дополнительные примеры и синтаксис описать.each().