Простое объяснение

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

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

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

Красный, Зеленый, Рефакторинг

Существует 3 этапа цикла разработки через тестирование.
Красная сцена, Зеленая сцена и Синяя сцена.

На красной стадии мы более широко думаем о том, какие элементы будут необходимы в проекте. Затем мы пишем модульные тесты, которые потерпят неудачу из-за отсутствия кода, но создают ожидания того, что код должен делать. Вы должны написать тест, который использует часть кода, как если бы он уже был реализован. Это когда мы начинаем разбивать нашу большую идею на части, над которыми можно работать. На этом этапе мы не думаем о том, как мы собираемся достичь каждой части, нас интересует только что необходимо.

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

Заключительный этап - Синий этап. На этом этапе мы оглядываемся назад на наш блок кода и рефакторим его, чтобы сделать его более простым и эффективным. Мы извлекаем любой повторяющийся код и следим за тем, чтобы форматирование делало код простым и разборчивым.

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

Плюсы

Разработка через тестирование имеет много преимуществ, поэтому она стала широко распространенным методом написания кода. Основное преимущество заключается в том, что вместо того, чтобы думать об одной гигантской базе кода, заполненной ссылками, которые ходят туда и обратно, у вас есть фрагменты кода, каждый из которых выполняет одну работу. Благодаря тому, что мы начинаем с юнит-тестов, мы знаем, что каждый фрагмент нашего кода будет иметь 100-процентную успешность. Это даст вам ощущение легкости, когда вы добавляете код или возвращаетесь, чтобы настроить что-то, поскольку вы знаете, что каждая часть работает независимо друг от друга.

написание тестов в первую очередь приводит к более глубокому и раннему пониманию требований к продукту, обеспечивает эффективность тестового кода и поддерживает постоянное внимание к качеству программного обеспечения.

Разработка через тестирование позволяет программисту сосредоточиться на поставленной задаче как на первой цели, что позволяет нам быть более сосредоточенными и эффективными.

Минусы

У любого подхода есть свои плюсы и минусы, и TDD ничем не отличается. Для начинающих изучение того, как использовать модульные тесты и использование этого подхода, требует обучения. Модульные тесты используют отдельную структуру, которую необходимо изучить, и это будет еще одна вещь, которую нужно изучить и привыкнуть использовать отдельно от кода, необходимого для проекта. Было бы намного проще просто начать кодировать функции, не думая слишком много о проекте в целом, но этот подход добавит большой шаг к началу проекта, который необходимо хорошо продумать, чтобы вы могли иметь содержательные тесты, которые будет производить значимые модули. Подход TDD должен быть реализован в проекте с самого начала. Добавление его в уже существующий проект потребует не только огромного объема работы, но и рефакторинга большого количества существующего кода. Добавление TDD в существующий проект потребовало бы значительного рефакторинга, но также потребовало бы структурных изменений в существующем проекте. Можно ожидать, что некоторые фрагменты дадут разные результаты, что потребует индивидуального прохождения каждого теста и изменения требований, что потребует изменения каждого блока кода.

Фреймворки

Это 5 самых популярных фреймворков для разработки через тестирование в Javascript:

Но лично я буду использовать Jest, так как он уже встроен в приложение create-react-app.