1 of 22

Розробка тестів для NodeJS-застосунків

2 of 22

Процес тестування

  • Дослідження програмного продукта, що має за мету перевірку відповідності між реальною поведінкою програми та її очікуваною поведінкою на кінцевому наборі тестів

3 of 22

4 основні види тестування

4 of 22

Функціональне тестування

  • тестування всіх функцій системи для підтвердження, що кожна функція програми працює відповідно до документації.

5 of 22

Елементи функціонального тестування

  • підготовка тестових даних
  • опис бізнес-вимог
  • опис очікуваних результатів на основі специфікації
  • проходження тест-кейсів
  • аналіз фактичних та очікуваних результатів

Функціональне тестування може бути проведено відповідно до специфікації, а також і на основі бізнес-процесу, тобто відповідно до знань системи.

6 of 22

Mocha - фреймворк для тестування JS-коду

  • Працює як на NodeJS так і в браузері
  • Тестування асинхронних функцій
  • https://mochajs.org/

7 of 22

Установка Mocha

Глобальна установка:

npm install --global mocha

Локальна установка:

npm install --save-dev mocha

Так як Mocha необхідний лише для тестування проекту, то він додається в файлі package.json в devDependencies завдяки атрибуту --save-dev.

8 of 22

Команда для запуску тестів

Для спрощення запуску тестів в package.json створимо команду:

Тести міститимуться в файлах з іменем *.test.js та запускатимуться командою npm test:

9 of 22

Приклад тестування функцій

Створимо файл functions.js і в ньому функцію додавання двох чисел:

10 of 22

Приклад використання. Створюємо тест

Створимо файл з тестами functions.test.js і в ньому додамо один тест:

11 of 22

Виконаємо тестування і отримуємо результат:

12 of 22

Специфікація тестів за методикою BDD (Behavior-driven development)

13 of 22

Test-driven development (розробка керована тестуванням)

Розробка, керована тестуванням, — це методологія розробки програмного забезпечення, яка, по суті, стверджує, що для кожної одиниці програмного забезпечення розробник програмного забезпечення повинен:

  • спочатку визначте тестовий набір для функції;
  • реалізувати функцію;
  • переконатись, що реалізація функції робить тести успішними.

14 of 22

Behavior-driven development (керована поведінкою розробка)

методологія передбачає виконання тестів у вигляді запитів, наближених до природної мови. Результатом є більш тісний зв'язок з критеріями прийнятності для конкретної функції та тестами, які використовуються для перевірки цієї функціональності.

  • Коли розпочати процес
  • Що тестувати та що не тестувати
  • Скільки тестувати за один раз
  • Як зрозуміти, чому тести пройшли неуспішно

15 of 22

Організація коду. Для створення тестів Mocha, як правило використовує шаблон:

describe() - використовується для групування аналогічних тестів.

it() - містить код тесту: взаємодія з функціями, що тестуються. Використання бібліотеки assert

16 of 22

Модуль assert

Має набір функцій-підтверджень для перевірки тестових випадків

17 of 22

Методи модуля assert

  • equal() - перевірка на рівність по значенню, використовується для простих значень
  • strictEqual() - перевірка на ідентичність
  • deepEqual() - використовується для об’єктів, дочірні властивості об’єктів також повинні бути рівні за значенням
  • deepStrictEqual()
  • match() - перевірка на співпадіння по шаблону
  • doesNotMatch() - перевірка на не співпадіння по шаблону

18 of 22

Опис специфікації:

Що саме описується та використовується для групування блоків it

Опис тесту та функція, що виконує тестування

Перевірка рівності результату функції правильному значенню

19 of 22

Завдання 1.

Створити функцію isSimple(a), яка перевіряє чи є дане число a простим.

Розробити систему тестів для цієї функції для значень -1, -7, 1, 2, 3, 5, 9, 17, 18

Зробіть функцію неправильною (наприклад для значень 2, 3, вона вертає false). Перевірте роботу тестів

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

20 of 22

Тестування асинхронного коду

Після виконання тесту потрібно викликати функцію done, яку передаємо як параметр в колбек функції it():

або

21 of 22

Хуки

Якщо перед виконанням тестів потрібно здійснювати підготовчі дії (наприклад, очистити колекцію), знадобиться хук before:

22 of 22

Завдання 2. Тести для збереження даних

Дано модель User із структурою та правилами: https://gist.github.com/alexanderkuzmenko/922a683712aba0eb191b815e6f75bab5

Розробіть набір тестів для збереження даних користувачів.

Тести повинні використовувати дані з колекції із щонайменше 8-ми записів

Щонайменше 6 записів із колекції повинні містити помилки валідації

Провести тестування та зробити висновки про правильність роботи збереження даних моделі

Приклад даних для тестування: