Порівняння двох підходів до Unit-тестування Angular-додатків

Автор(и)

  • Ю.В. Полупан Національний технічний університет України "Київський політехнічний інститут імені Ігоря Сікорського"
  • П.Ю. Родіонов Національний технічний університет України "Київський політехнічний інститут імені Ігоря Сікорського"
  • М.К. Дьомін Cхідноукраїнський національний університет імені Володимира Даля, м. Київ

DOI:

https://doi.org/10.33216/1998-7927-2024-285-5-5-9

Ключові слова:

Unit-тестування, Angular-додаток, Jasmine, Karma, Jest, модульні тести, --testcoverage, Angular CLI, ChromeHeadless, реактивність, синхронний та асинхронний код

Анотація

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

Для тестування Angular-додатків в роботі було обрано два підходи: 1) з використанням зв’язки Jasmine + Karma, що встановлюється за замовчуванням при створенні додатку; 2) з використанням Jest.

В статті тестується Angular-додаток, який має 7 тестів, 3 з яких – тести синхронних блоків коду і 4 – для асинхронних блоків. При тестуванні використовувались інструменти, що пропонує Angular із коробки та фреймворк Jest.

Для вимирювання ефективності Unit-тестів, як правило, використовуються чотири критерії [2, 4]: захист від помилок (protectionagainstbugs); стійкість до рефакторингу (resiliencetorefactoring); швидкість зворотнього зв’язку (fastfeedback); простота підтримки (maintainability). Порівнюючи різні підходи до тестування можна визначити як той чи інший підхід впливає на конкретний критерій ефективності Unit-тестів, підвищуючі його, або навпаки зменшуючі. Як відомо, на сьогодні не існує автоматичного способу вимірювання ефективності з отриманням значень для кожного критерію і тому кожен тест потрібно оцінювати окремо. Для отримання значення по критерію «швидкість зворотнього зв’язку» будемо використовувати час виконання тестів, в тому числі з визначенням відсотка покриття коду тестами при допомозі команди coverage. Цей критерій показує, що чим швидше виконується тест на етапі розробки, тим меньше часу витрачається на усунення знайденних помилок, тим самим, значно підвищуючи ефективність Unit-тестів.

В результаті порівняння роботи двох фреймворків для тестування, можно зробити висновок, що при використанні Jest тести виконуються в середньому на 60%  швидше за рахунок того, що система відстежує зміни файлів та не виконує непотрібних дій. При тестуванні ассинхронного коду така ж тенденція (збільшення швидкості тестування на 60%) зберігається, тому  Jest відмінно підходить для виконання тестування Angular-проектів, які містять багато асинхронного коду.

Так як ефективність Unit-тестів залежить від швидкості зворотнього зв’язку (fastfeedback), то, використовуючіJest, ми, тим самим, значно підвищуємо ефективність Unit-тестування та всього проекту вцілому.

Посилання

1) Офіційна документація. https://v17.angular.io/guide/testing

2) Vladimir Khorikov “Unit Testing Principles, Practices, and Patterns” / Manning, 2020, 304 p. ISBN: 978-1617296277.

3) Mauricio Aniche ”Effective Software Testing: A developer's guide” / Manning. 2022, 328 p. ISBN: 978-1633439931.

4) Vladimir Khorikov “The Art of Unit Testing, Third Edition: with examples in JavaScript 3rd ed. Edition” / Manning. 2024. 288p. ISBN: 978-1617297489

5) Lamis Chebbi "Reactive Patterns with RxJS for Angular", Published by Packt Publishing Ltd, 2022.

6) Sergi Mansilla "Reactive Programming with RxJS". The Pragmatic Programmers, 2015.

7) Adam Freeman, «Pro Angular. Build Powerful and Dynamic Web Apps». Fifth Edition. Publisher: Apress Berkeley, CA. 2022, 880 pages. DOI: https://doi.org/10.1007/978-1-4842-8176-5.

8) Majid Hajian «Progressive Web Apps with Angular» // Publisher: Apress Berkeley, CA. 2019, 380 pages. DOI: https://doi.org/10.1007/978-1-4842-4448-7.

9) Victor Hugo Garcia «Getting Started with Angular. Create and Deploy Angular Applications» // Publisher: Apress Berkeley, CA. 2023, 373 pages. DOI: https://doi.org/10.1007/978-1-4842-9206-8.

##submission.downloads##

Опубліковано

2024-12-10