Автоматичне тестування буде використовуватися у наступних завданнях, і воно широко використовується у реальних проєктах.
Навіщо нам потрібні тести?
Коли ми пишемо функцію, ми можемо уявити, як її будуть використовувати – які параметри дають який результат.
Під час розробки ми можемо перевірити функцію, запустивши її та перевіряючи фактичний результат з очікуваним. Наприклад, ми можемо робити це у консолі.
Якщо результат не вірний – ми можемо підправити код, запустити її знову, перевірити результат знову, і так до тих пір, поки вона не працюватиме вірно.
Але такі ручні “повторні запуски” недосконалі.
Тестуючи код вручну, можна легко щось упустити.
Наприклад, ми створили функцію f. Перевірили деякий код, тестуємо: f(1) працює, але f(2) не працює. Ми підправляємо код і тепер f(2) працює. Здається, що справу зроблено? Але ми забули перевірити чи f(1) досі працює. Це може призвести до помилки.
Це дуже типово. Коли ми щось розробляємо, ми пам’ятаємо про багато можливих випадків використання. Але не треба очікувати, що програміст перевірятиме їх усі вручну після кожної зміни. Так стає легко виправити щось одне і зламати інше.
Автоматизоване тестування означає, що тести пишуться окремо від основного коду, доповнюючи його. Вони запускають наші функції різними способами та порівнюють результати з очікуваними.
Керована поведінкою розробка (BDD)
Розпочнімо з техніки під назвою Керована поведінкою розробка або коротко, BDD (від англ. behavior-driven development).
BDD це три в одному: і тести, і документація, і приклади використання.
Щоб зрозуміти BDD, ми розглянемо реальний приклад розробки.
Розробка функції піднесення до степеня – “pow”: специфікація
Припустимо, ми хочемо зробити функцію pow(x, n), яка піднесе x до степеня n. Ми припускаємо, що n≥0.
Це завдання є просто прикладом – в JavaScript є оператор **, що підносить до степеня, але в цьому прикладі ми зосередимось на процесі розробки, який потім можна також застосовувати й для складніших завдань.
Перш ніж створити код для функції `pow ', ми можемо уявити, що вона повинна виконувати, і описати її.
Такий опис називається специфікацією, і він описує приклади використання функції разом з тестами, наприклад:
describe("pow", function() {
it("підносить до n-нного степеня", function() {
assert.equal(pow(2, 3), 8);
});
});
Як ви помітили, специфікація має три основні блоки:
describe("title", function() { ... })-
Яку функціональність ми описуємо. В нашому випадку, ми описуємо функцію
pow. Використовується для групування блоківit, які “виконують роботу”.