Недавнее использование Test-Driven-Development (TDD) разрушило некоторые из моих плохих привычек программирования и выработало лучшие. Присоединяйтесь к TDD, если вы еще этого не сделали - я позволю Эрику Эллиотту объяснить, почему это потрясающе.

Среди этих лучших привычек - концепция автоматизации ввода в моих модульных тестах.

Давай сделаем это вместе!

Возьмите свою любимую комбинацию редактор / терминал. Я использую Atom и PlatformIO IDE Terminal.

Настраивать

Используйте npm init -y и установите Jest как devDependency.

В вашем package.json заполните test сценарий NPM с помощью jest --watchAll. Это говорит Jest повторно запускать наши модульные тесты при каждом изменении.

Функциональность

Мы собираемся написать функцию под названием randomBetween; он генерирует случайное число между двумя числами.

А поскольку мы проповедуем TDD, сначала мы напишем тест! Добавьте файл с именем randomBetween.spec.js. Вот код спецификации.

Тест довольно прост: убедитесь, что randomBetween(1, 10) возвращает число от 1 до 10. Давайте запустим Jest в терминале с npm test.

Ах да, мы не определили randomBetween… давайте сделаем это! Создайте новый файл с именем randomBetween.js. Вот код.

Теперь импортируйте его и смотрите, как проходит тест.

Это здорово, но ...

… Я не фанат такого тестирования. Весь смысл модульного теста состоит в том, чтобы избежать ручной работы, но мы вручную вводим randomBetween его ввод.

Наш тест проходит только в точном сценарии. Что, если мы вызовем randomBetween более одного раза или предоставим другой диапазон? Мы тоже пишем эти сценарии вручную? Нет, спасибо.

Петли на сутки

Мы можем автоматизировать наш ввод с помощью циклов! Все, что нам нужно, это возможность запускать функцию n раз и видеть результаты в виде массива.

Я лично использую функцию times от Ramda, но мы можем написать простую times для наших целей. Создайте новый файл с именем times.js. Вот код.

Он вызывает fn(n) n раз и возвращает массив результатов. Попробуйте это в консоли вашего браузера.

Вернемся к испытаниям!

Таким образом, у нас есть 1000 чисел от 1 до 10. А поскольку это массив, мы можем использовать метод every!

MDN Docs:

Метод every() проверяет, все ли элементы в массиве проходят проверку, реализованную предоставленной функцией.

Проверяет каждый элемент, а? Идеально.

Все сделано

Еще одно преимущество состоит в том, что ваши тестовые входные данные всегда будут уникальными, потому что вы каждый раз генерируете 1000 случайных чисел.

Если вы хотите сходить с ума, выберите случайный диапазон, с которым вы вызываете randomBetween. O_O ”

Эта идея сделала модульное тестирование более приятным для меня. После планирования функционального тестирования, забейте его множеством различных входных данных и посмотрите, что сломается. Вот как вы обеспечиваете действительно пуленепробиваемый код. Сообщите мне, поможет ли это или вы уже этим занимались.

До скорого!

Береги себя,
Язид Бзадоу