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

Хотя название этой статьи вводит в заблуждение, тем не менее, именно это я сказал себе, когда услышал, что мы собираемся писать много тестов на Bootcamp. Andela — компания, ориентированная на совершенство, поэтому важно привить своим разработчикам важность тестирования продукта, чтобы гарантировать его качество и успех.

Ниже приведена лишь часть того, что я узнал о тестировании во время подготовки к Bootcamp.

Что такое тестирование программного обеспечения?

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

Чтобы укрепить свое понимание того, зачем нужно тестирование, я написал об этом статью среднего размера здесь https://medium.com/@codeshifu/the-need-to-test-shipping-better-softwares-56696609c4ef.

Что такое TDD (разработка через тестирование)?

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

Трехэтапный процесс TDD

  1. Напишите тест и посмотрите, как он провалится
  2. Напишите код, чтобы пройти тест
  3. Рефакторинг кода

Как сделать ТДД

Чтобы увидеть, как работает разработка через тестирование, давайте создадим простое приложение.

Предпосылка

NodeJS

Требование к проекту

Создайте простое приложение-калькулятор, способное выполнять сложение. Приложение должно правильно складывать числа.

Требование к этому приложению довольно простое и понятное, нам просто нужно сложить два числа, верно? Не совсем так, 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, все пройдет успешно.

Спасибо за чтение, и скоро увидимся.