From 567e94e3738313a85945828e62a115ff027fb280 Mon Sep 17 00:00:00 2001 From: Andrii Hrushetskyi Date: Sun, 16 Feb 2025 11:39:33 +0100 Subject: [PATCH] fixed typos and simplified explanation **In chapter 3-05 testing mocha** Some of sentences were correct, but they were "unnatural" in Ukrainian and make understanding more difficult. --- .../05-testing-mocha/article.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/article.md b/1-js/03-code-quality/05-testing-mocha/article.md index 26b93dca6..b4a95afc1 100644 --- a/1-js/03-code-quality/05-testing-mocha/article.md +++ b/1-js/03-code-quality/05-testing-mocha/article.md @@ -4,17 +4,17 @@ ## Навіщо нам потрібні тести? -Коли ми пишемо функцію, ми можемо уявити, як її будуть використовувати - які параметри дають який результат. +Коли ми пишемо функцію, ми можемо уявити як її будуть використовувати - які параметри даватимуть який результат. -Під час розробки ми можемо перевірити функцію, запустивши її та перевіряючи фактичний результат з очікуваним. Наприклад, ми можемо робити це у консолі. +Під час розробки ми можемо перевірити функцію запустивши її та звіривши фактичний результат з очікуваним. Наприклад, ми можемо робити це у консолі. -Якщо результат не вірний -- ми можемо підправити код, запустити її знову, перевірити результат знову, і так до тих пір, поки вона не працюватиме вірно. +Якщо фактичний результат не відповідає очікуваному -- ми можемо підправити код, запустити її знову, перевірити результат знову, і так до тих пір, поки вона не працюватиме вірно. Але такі ручні "повторні запуски" недосконалі. **Тестуючи код вручну, можна легко щось упустити.** -Наприклад, ми створили функцію `f`. Перевірили деякий код, тестуємо: `f(1)` працює, але `f(2)` не працює. Ми підправляємо код і тепер `f(2)` працює. Здається, що справу зроблено? Але ми забули перевірити чи `f(1)` досі працює. Це може призвести до помилки. +Наприклад, ми створили функцію `f`. Перевірили деякий код. Тестуємо: `f(1)` працює, але `f(2)` не працює. Ми підправляємо код і тепер `f(2)` працює. Здається ніби справу зроблено. Але ми забули перевірити чи `f(1)` досі працює. Це може призвести до помилки. Це дуже типово. Коли ми щось розробляємо, ми пам’ятаємо про багато можливих випадків використання. Але не треба очікувати, що програміст перевірятиме їх усі вручну після кожної зміни. Так стає легко виправити щось одне і зламати інше. @@ -24,7 +24,7 @@ Розпочнімо з техніки під назвою [Керована поведінкою розробка](https://uk.wikipedia.org/wiki/Керована_поведінкою_розробка) або коротко, BDD (від англ. behavior-driven development). -**BDD це три в одному: і тести, і документація, і приклади використання.** +**BDD -- це три в одному: і тести, і документація, і приклади використання.** Щоб зрозуміти BDD, ми розглянемо реальний приклад розробки. @@ -32,9 +32,9 @@ Припустимо, ми хочемо зробити функцію `pow(x, n)`, яка піднесе `x` до степеня `n`. Ми припускаємо, що `n≥0`. -Це завдання є просто прикладом - в JavaScript є оператор `**`, що підносить до степеня, але в цьому прикладі ми зосередимось на процесі розробки, який потім можна також застосовувати й для складніших завдань. +Це завдання є просто прикладом. В JavaScript це саме може зробити оператор `**`, але ми використаємо цей приклад щоб зосередитись на процесі розробки, який потім можна також застосовувати й для складніших завдань. -Перш ніж створити код для функції `pow ', ми можемо уявити, що вона повинна виконувати, і описати її. +Перш ніж створити код для функції `pow`, ми можемо уявити, що вона повинна виконувати, і описати її. Такий опис називається *специфікацією*, і він описує приклади використання функції разом з тестами, наприклад: @@ -59,7 +59,7 @@ describe("pow", function() { `assert.equal(value1, value2)` : Код всередині блоку `it` має виконуватись без помилок, якщо реалізація правильна. - Функції `assert.*` використовуються для перевірки того, що функція `pow` працює, як ми очікуємо. В нашому випадку, ми використовуємо одну з них -- `assert.equal`, вона порівнює аргументи і сповіщає про помилку, якщо вони відрізняються. Тут вона перевіряє, що результат `pow(2, 3)` дорівнює `8`. Є також інші способи порівняння та перевірки, які ми розглянемо пізніше. + Функції `assert.*` використовуються для перевірки того, що функція `pow` працює, як ми очікуємо. В нашому випадку, ми використовуємо одну з них -- `assert.equal`, вона порівнює аргументи і сповіщає про помилку, якщо вони відрізняються. Тут вона перевіряє чи результат `pow(2, 3)` дорівнює `8`. Є також інші способи порівняння та перевірки, які ми розглянемо пізніше. Специфікацію можна виконати, і вона автоматично виконає тести, вказані у блоках `it`. Ми розглянемо це далі. @@ -67,9 +67,9 @@ describe("pow", function() { Зазвичай, процес розробки має наступний вигляд: -1. Пишуть первинну специфікацію з тестами основного функціонала. +1. Пишуть первинну специфікацію з тестами основного функціоналу. 2. Створюється початкова реалізація. -3. Щоб перевірити, чи вона працює, ми використовуємо тестовий фреймворк [Mocha](https://mochajs.org/) (більш детально нижче), який виконує специфікацію. Якщо функціонал не завершено -- виводяться повідомлення про помилки. Ми робимо виправлення до тих пір, поки не матимемо повністю робочий код. +3. Щоб перевірити, чи вона працює, ми запускаємо фреймворк для тестів [Mocha](https://mochajs.org/) (більш детально нижче), який виконує специфікацію. Якщо функціонал не завершено -- виводяться повідомлення про помилки. Ми робимо виправлення до тих пір, поки наш код не почне працювати як слід. 4. Тепер ми маємо початкову реалізацію з тестами. 5. Ми додаємо більше способів використання до специфікації, навіть таких, що поки що не підтримуються реалізацією. Виконання тестів знову завершиться невдачею. 6. Переходимо на 3-й пункт, змінюємо реалізацію, щоб вона відповідала тестам і вони не повертали повідомлення про помилку. @@ -86,7 +86,7 @@ describe("pow", function() { Тут у посібнику ми будемо використовувати такі бібліотеки JavaScript для тестів: - [Mocha](https://mochajs.org/) -- базовий фреймворк: він забезпечує нас загальними функціями для тестування, в тому числі `describe` та `it`, а також головною функцією, що виконує тести. -- [Chai](https://chaijs.com) -- бібліотека для порівняння і оцінки роботи коду. Вона дозволяє використовувати безліч різних порівнянь, але поки що нам потрібне лише функція порівняння `assert.equal`. +- [Chai](https://chaijs.com) -- бібліотека для порівняння і оцінки роботи коду. Вона дозволяє використовувати безліч різних порівнянь, але поки що нам потрібна лише функція порівняння `assert.equal`. - [Sinon](https://sinonjs.org/) -- бібліотека для "шпигування" за функціями, емуляції вбудованих функцій тощо, нам це знадобиться набагато пізніше. Ці бібліотеки підходять як для тестування в браузері, так і на стороні сервера. Тут ми розглянемо варіант тестування в браузері. @@ -99,7 +99,7 @@ describe("pow", function() { Сторінку можна розділити на п’ять частин: 1. `` містить сторонні бібліотеки та стилі для тестів. -2. `