Готовясь к Andela Bootcamp, я многому научился и до сих пор учусь. Только за первую неделю мне пришлось разучиваться и заново учиться многим вещам, которые я уже знаю. В ходе обучения я приобрел важный навык, которого ожидают от каждого разработчика, желающего создавать и выпускать более качественные продукты на современном рынке. Этим навыком является TDD (разработка через тестирование), процесс разработки программного обеспечения, основанный на повторении очень короткого цикла разработки.
Хотя название этой статьи вводит в заблуждение, тем не менее, именно это я сказал себе, когда услышал, что мы собираемся писать много тестов на Bootcamp. Andela — компания, ориентированная на совершенство, поэтому важно привить своим разработчикам важность тестирования продукта, чтобы гарантировать его качество и успех.
Ниже приведена лишь часть того, что я узнал о тестировании во время подготовки к Bootcamp.
Что такое тестирование программного обеспечения?
Тестирование программного обеспечения — это исследование, проводимое для предоставления заинтересованным сторонам информации о качестве тестируемого программного продукта или услуги. — Википедия
Чтобы укрепить свое понимание того, зачем нужно тестирование, я написал об этом статью среднего размера здесь https://medium.com/@codeshifu/the-need-to-test-shipping-better-softwares-56696609c4ef.
Что такое TDD (разработка через тестирование)?
Разработка через тестирование (TDD) — это эволюционный подход к разработке, который сочетает в себе разработку, основанную на тестировании, при которой вы пишете тест, прежде чем написать достаточно производственного кода для выполнения этого теста, и рефакторинг. Другими словами, это один из способов продумать свои требования или дизайн, прежде чем писать свой функциональный код.
Трехэтапный процесс TDD
- Напишите тест и посмотрите, как он провалится
- Напишите код, чтобы пройти тест
- Рефакторинг кода
Как сделать ТДД
Чтобы увидеть, как работает разработка через тестирование, давайте создадим простое приложение.
Предпосылка
Требование к проекту
Создайте простое приложение-калькулятор, способное выполнять сложение. Приложение должно правильно складывать числа.
Требование к этому приложению довольно простое и понятное, нам просто нужно сложить два числа, верно? Не совсем так, Javascript — язык с динамической типизацией, и это означает, что мы не устанавливаем явно типы для переменных. Это одна из гибких возможностей языка и одна из причин его плохой репутации на протяжении многих лет.
// Addition in javascript 2 + 2 = 4; 2 + “2” = 22; // oh oh!
Начиная
mkdir calculator-app && cd calculator-app
(при этом создается каталог с именем калькулятор-приложение, а затем вы перемещаетесь в него)
npm init -y
(создает файл package.json, мы игнорируем приглашение stdin с флагом -y и принимаем значение по умолчанию)
Затем мы установим тестовую среду и библиотеку утверждений под названием mocha и chai.
npm install mocha chai — save-dev
В файле package.json
мы добавим скрипт npm для запуска нашего теста.
“scripts”: { “test”: “mocha” }
Напишите тест, который не работает
Затем создайте каталог test в корневой папке проекта (приложение-калькулятор) и создайте файл (в только что созданном каталоге test) с именем addition.spec.js
.
Внутри addition.spec.js
давайте создадим наш тест и посмотрим, как он провалится.
const chai = require(‘chai’); describe(‘#add’, () => { it(‘should add two numbers correctly’, () => { expect(add(2, 2)).to.equal(4); }); });
Если мы запустим наш тест с npm run test
, он потерпит неудачу. Здорово! Первая фаза процесса TDD завершена.
Напишите код для прохождения теста
Создайте файл с именем addition.js
file в корневой папке нашего проекта и добавьте эту простую функцию.
function add (a, b) { return a + b; } module.exports = add;
Давайте обновим наш файл addition.spec.js
, чтобы использовать только что созданную функцию.
const chai = require(‘chai’); const add = require(‘../addition’); describe(‘#add’, () => { it(‘should add two numbers together correctly’, () => { expect(add(2, 2)).to.equal(4); }); it(‘should throw error for invalid argument’, () => { expect(() => add(‘4’, 2)).to.throw(‘Invalid argument’); }); });
Давайте повторим тест с npm run test
и вуууу! 1 из 2 тестов проходит.
Рефакторинг
Последним шагом нашего процесса TDD является рефакторинг нашей функции add
в файле addition.js
.
function add (a, b) { if (typeof a !== ‘number’ || typeof b !== ‘number’) throw new TypeError(‘invalid argument’); return a + b; } module.exports = add;
Теперь, если мы запустим наш тест с npm run test
, все пройдет успешно.
Спасибо за чтение, и скоро увидимся.