Возможность протестировать написанный вами код - важная часть кодирования. Для нескольких проектов, над которыми я работал, после написания некоторого кода для приложения я затем тестировал код, заходя в приложение, проверяя, все ли работает так, как ожидалось, и что я ничего не сломал.

Однако есть еще один способ протестировать наш код, не заходя в наше приложение. Это делается путем написания некоторого тестового кода, который мы можем запустить с помощью команды. Этот тестовый код сообщит нам, все ли работает должным образом (при условии, что мы правильно напишем наши тесты).

Это помогает, потому что, когда мы вносим изменения в наше приложение, мы можем запустить тестовую команду и выяснить, работает наш код или нет. При тестировании вы можете использовать несколько фреймворков. Но чтобы продемонстрировать, как работает и выполняется тест, я рассмотрю код, не требующий фреймворков, и протестирую простые функции в Node.js.

В качестве примера я буду использовать функцию map. Очевидно, что это непрактично, поскольку функция карты встроена в JavaScript, и нам не придется создавать эту функцию. Однако это основная функция, и большинство людей знает, что она делает и как работает. Так будет легче понять, почему тест работает или не работает.

Итак, в файле JavaScript мы могли бы написать нашу forEach() функцию, а затем экспортировать ее как модуль, чтобы впоследствии мы могли импортировать и использовать ее в другом месте нашего проекта (мы также должны иметь возможность импортировать ее в наш тестовый файл). Карта будет определяться следующим образом:

map(arr, fn) {
  const result = [];
  for(let i = 0; i < arr.length; i++){
    result.push(fn(arr[i], i));
  }
  return result;
}

Цель состоит в том, чтобы запустить цикл через наш массив и запустить его через функцию, которая передает результат функции в новый массив, а затем возвращает этот массив. Теперь, когда мы создали нашу карту, мы можем создать наш тест, чтобы увидеть, правильно ли он работает. Для теста мы можем использовать любой общий оператор, который вы бы использовали с массивом.

Как вы тестируете, не имеет значения. Вы можете протестировать сопоставление строк, объединяя что-то в конце каждой из них, или использовать числа и выполнять некоторые математические операции с числами. Важно лишь знать, каким должен быть ожидаемый результат.

Поэтому для этого теста я буду использовать короткий массив чисел и вычесть 1 из каждого числа в массиве (чтобы я мог просто определить, каким должен быть результирующий массив).

Для начала нам нужно создать файл для записи теста и убедиться, что имя файла заканчивается на .test.js (например, index.test.js). . Затем в этом файле мы тестируем нашу карту. Вы можете увидеть тест ниже:

const result = map([1,2,3], value =>{
  return value - 1;
});
if(result[0] !== 0) {
  throw new Error(`Expected to find 0, but found ${result[0]}`)
}
if(result[1] !== 1) {
  throw new Error(`Expected to find 1, but found ${result[1]}`)
}
if(result[2] !== 2) {
  throw new Error(`Expected to find 2, but found ${result[2]}`)
}

Как видите, мы просто тестируем функцию карты на массиве [1,2,3] и выводим условные операторы с ожидаемым результатом для каждого индекса. И если результат не такой, как ожидалось, код выдает ошибку с указанием того, каким должен быть результат и что он есть на самом деле. Если мы запустим этот файл в терминале с помощью:

node index.test.js

Мы ничего не увидим, что является хорошим знаком, потому что, если мы не получим ошибку, наши тесты пройдены. Мы могли бы вызвать ошибку, если бы допустили ошибку в карте, например, если бы мы начали наш цикл с 1 вместо 0. Это приведет к сбою наших тестов, и код выдаст ошибку.

Вот и все! Надеюсь, эта статья окажется полезной и поможет вам успешно протестировать свой код.

Больше контента на plainenglish.io