Недавнее использование 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
!
Метод
every()
проверяет, все ли элементы в массиве проходят проверку, реализованную предоставленной функцией.
Проверяет каждый элемент, а? Идеально.
Все сделано
Еще одно преимущество состоит в том, что ваши тестовые входные данные всегда будут уникальными, потому что вы каждый раз генерируете 1000 случайных чисел.
Если вы хотите сходить с ума, выберите случайный диапазон, с которым вы вызываете randomBetween
. O_O ”
Эта идея сделала модульное тестирование более приятным для меня. После планирования функционального тестирования, забейте его множеством различных входных данных и посмотрите, что сломается. Вот как вы обеспечиваете действительно пуленепробиваемый код. Сообщите мне, поможет ли это или вы уже этим занимались.
До скорого!
Береги себя,
Язид Бзадоу