API testing overview

API всюди, і в більшості випадків ми не приділяємо їм багато уваги, навіть якщо використовуємо їх кілька разів на день. Щоразу, коли ви входите на веб-сайт за допомогою свого облікового запису Google або Facebook, перевіряєте розташування нового ресторану на Картах Google прямо з веб-сайту ресторану або оплачуєте покупки на сайті електронної комерції за допомогою свого облікового запису PayPal, ви бачите дію API .
Але хоча API зазвичай служать одній меті і не є особливо великими або складними програмними продуктами, для забезпечення бездоганної продуктивності, повної функціональності та надійної безпеки розробникам потрібно багато тестувань. І зараз багато організацій вважають за краще автоматизувати тестування API, щоб заощадити час і гроші на перевірку якості та отримати стабільніші результати. На сьогоднішній лекції ми поговоримо про те, навіщо та як використовувати автоматизоване тестування API.
Що таке АПІ тестування
Тестування API — це процес перевірки правильності роботи API (Application Programming Interface) шляхом безпосередньої взаємодії з додатком, минаючи UI інтерфейс. Оскільки все більше компаній покладаються на технологію API, щоб запропонувати своїм користувачам більш надійну функціональність і перевершити конкурентів, тестування API стає основою будь-якого поточного проекту розробки програмного забезпечення та контролю якості.
Тестування API також є важливою частиною переходу від монолітної архітектури до мікросервісів. Все більше компаній віддають перевагу створенню гнучких і масштабованих рішень, що складаються з кількох менших одиниць, таких як API, замість великих монолітних систем. З одного боку, це призводить до розробки зручних програмних рішень із певним призначенням. З іншого боку, це створює потребу тестувати кожен блок або API окремо та в поєднанні з іншими блоками.
Яка різниця з іншими типами тестування
Однією з найбільших відмінностей між тестуванням API та іншими рівнями та типами тестування є сам підхід до тестування. Замість імітації поведінки кінцевого користувача, як ви робите під час тестування UI користувача, під час тестування API ви переконаєтеся, що продукт працює належним чином незалежно від поведінки користувача. Крім того, тестування API коштує дешевше, і його легше виконати, ніж багато інших типів тестування.
Плюси і мінуси автоматизованого АПІ тестування

Навіщо автоматизувати тестування API?
Як і у випадку з багатьма іншими типами та рівнями тестування програмного забезпечення, тестування API можна проводити повністю вручну. Однак автоматизація процесу приносить значні переваги всій розробці програмного забезпечення та роботі з контролю якості. Ось кілька причин, чому тестування API є важливим і заслуговує на вашу пильну увагу:
Автоматизація тестування API дозволяє виявляти помилки раніше, перш ніж вони завдадуть ще більшої шкоди всьому продукту або зупинять процес розробки. Автоматизоване тестування API забезпечує майже нескінченні можливості повторного використання тестових кейсів, що призводить до більш ефективного тестування та швидшої розробки продуктів API. Автоматизація тестування API усуває ризик того, що людська помилка може спотворити результати тестування, неправильно інтерпретувати результати або пропустити деякі важливі кроки в процесі тестування. У той час як автоматизація тестів API вимагає фінансових інвестицій на початкових етапах, повторне використання тестів дозволяє організації заощадити гроші на тестуванні в довгостроковій перспективі. Автоматизація тестування API підвищує продуктивність, безпеку та масштабованість програмного рішення, яке використовує технологію API помітніше, ніж тестування вручну.
Чи завжди доцільно автоматизувати тестування API?
Переваги автоматизованого тестування API здаються надто великими, щоб хтось сумнівався в корисності цього типу контролю якості. Але чи завжди є сенс автоматизувати тестування API в організації?
З практичної точки зору, автоматизація зазвичай не потрібна для невеликих проектів тестування, які не очікуються довгостроковими. Тестування API автоматизації також може бути зайвим, якщо немає значного набору регресійних тестів, про які слід подбати, оскільки методи автоматизації ідеально працюють із регресійним тестуванням.
Ситуація, коли автоматизація тестування API має досконалий сенс і безперечно потрібна, коли API є продуктом, який розробляється, а не просто ще одним компонентом більшого продукту. Оскільки репутація компанії залежить від якості API, суворе тестування, включаючи автоматизований контроль якості, є обов’язковим.
Переваги тестування API

Тестування API може покращити тестове покриття, заощадити час і ресурси для релізу програм. Ось деякі з переваг тестування API:
Економія часу
Тестування API можна розпочати на дуже ранніх стадіях циклу розробки на рівні інтеграції, і для цього не потрібен готовий графічний інтерфейс. Тести API надають результати тестів набагато швидше та значно прискорюють процеси розробки. У результаті ви можете скоротити цикл зворотного зв’язку та швидше виявляти помилки.
Хоча тести API можна виконати за кілька секунд, тести UI інтерфейсу потребують більше часу для відображення та завантаження веб-сторінок і елементів інтерфейсу.
Зменшення витрат
Зниження витрат і економія часу йдуть рука об руку. Тестування API дає перевагу виявлення проблем на ранній стадії SDLC, починаючи тестування відразу після визначення бізнес-логіки та перед тестуванням інтерфейсу користувача. Це дає змогу виправляти проблеми до того, як вони вплинуть на продакшні. Раннє виявлення знижує вартість внесення змін та усунення проблеми. Крім того, автоматизація тестів API потребує менше коду, ніж автоматизація тестів GUI, що в кінцевому підсумку прискорює тестування та знижує витрати на тестування.
Незалежна від мови програмування
Оскільки обмін даними здійснюється за допомогою форматів JSON або XML і HTTP-запитів і відповідей, тести API можна виконувати будь-якою мовою та повністю не залежать від мови програми. Це означає, що автоматизатори можуть без обмежень використовувати будь-яку мову програмування, яка підтримує ці технології (JavaScript, Java, Ruby, Python, PHP тощо).
Більша стабільність
Інтерфейси API, особливо якщо вони доступні стороннім особам, є набагато стабільнішими, ніж GUI інтерфейси, які мають тенденцію змінюватися через їх динамічну природу для задоволення нових запитів від зацікавлених сторін і користувачів.
Будь-які зміни в API зазвичай відображаються у великій документації, яка зазвичай супроводжує їх, що дозволяє інженерам із забезпечення якості оперативно змінювати свої набори тестів. Це робить тести API менш інтенсивними в обслуговуванні та призводить до меншої кількості помилкових негативних результатів від застарілих тестів.
Підвищення покриття тестами
Більшість API сервісів мають специфікації, які дозволяють створювати тести з високим рівнем покриття, які охоплюють як функціональне тестування, так і нефункціональне тестування, щоб гарантувати, що всі компоненти системи працюють належним чином. Це допомагає знайти потенційні недоліки в серверах, базах даних та інтерфейсах, підвищуючи загальну якість програмного забезпечення та покращуючи взаємодію з користувачем.
Охоплення різних платформ
Коли додаток стає доступним для кількох інших платформ, як-от мобільних пристроїв, десктопні комп’ютери, тощо – то використовується той самий набір API. Таким чином, коли ми тестуємо колекцію API, ми також переконуємося, що бізнес-логіка буде виконуватися однаково на різних платформах, що веде до економії часу та коштів.
Недоліки автоматизації API
Під час тестування API можна зустріти кілька проблем. До них належать:
Налаштування складного тестового середовища. Налаштування тестового середовища для автоматизації API може бути складним, особливо коли ви маєте справу з кількома API, сторонніми інтеграціями або мікросервісами. Це вимагає ретельного налаштування інфраструктури тестування, включаючи кінцеві точки API, механізми автентифікації та керування тестовими даними. Координація залежностей і забезпечення стабільного середовища для тестування може зайняти багато часу та може вимагати співпраці між командами розробки, операцій і тестування.
Обробка динамічних даних і змінних відповідей: API часто генерують динамічні дані або видають відповіді, які можуть відрізнятися залежно від вхідних параметрів, стану системи або зовнішніх факторів. Тест кейси повинні враховувати ці динамічні елементи, такі як генерування унікальних ідентифікаторів, часових позначок (timestamps) або обробки розбиття на сторінки. Крім того, зміни в поведінці API або форматі відповіді можуть вплинути на наявні тестові сценарії, вимагаючи постійного обслуговування та оновлень.
Підтримка тест кейсів і масштабованість. Оскільки екосистема API організації розвивається та розширюється, підтримка та масштабування інфраструктури автоматизації тестування може стати проблемою. Кожне оновлення чи доповнення API може потребувати відповідних змін у сценаріях тестування для забезпечення точного тестування. Крім того, керування великою кількістю тестових випадків, забезпечення цілісності тестових даних і оптимізація часу виконання тесту можуть створити проблеми масштабованості, які необхідно вирішити для досягнення ефективної автоматизації.
Автентифікація та авторизація: API часто вимагають механізмів автентифікації та авторизації для захисту доступу до конфіденційних даних або функцій. Впровадження та керування протоколами автентифікації, такими як ключі OAuth або API, у рамках автоматизації може бути складним. Обробка маркерів автентифікації, оновлення маркерів або керування файлами cookie сеансу під час виконання автоматизованих тестів вимагає ретельного розгляду, щоб забезпечити належну авторизацію та дійсні сценарії тестування.
Незважаючи на ці проблеми, автоматизоване тестування API може стати цінним доповненням до вашого арсеналу тестування. При правильному використанні це може допомогти покращити якість ваших API і заощадити час і ресурси.
best practices for api automation
Під час автоматизації тестування API слід дотримуватися кількох порад. До них належать:
Планування та дизайн: автоматизовані тести слід ретельно планувати та проектувати. Це допоможе переконатися, що такі процедури, та їх виконання, ефективні та не спричинять неочікуваних проблем. Раннє тестування та часто: важливо перевіряти продуктивність за допомогою різних типів тестування API, таких як тести GUI, тестування REST API, секюріті тестування та регресійне тестування. Перевірку АПІ слід проводити якомога раніше в процесі розробки програмного забезпечення, оскільки це допоможе виявити помилки та потенційні проблеми, перш ніж вони стануть проблематичними. Також важливо зазначити, що завжди має бути постійне тестування, оскільки помилки можуть виникати на кожному етапі життєвого циклу API. Будьте простими: автоматизовані тести мають бути максимально простими. Це допоможе знизити ризик помилок і підвищить шанси на успіх. Ведіть документацію: документація є важливою для автоматизованих тестів. Це допомагає відстежувати, що було перевірено та що потрібно зробити далі. Розробники також можуть повторно використовувати документи як навчальні посібники та тренінги для нових членів команди. Крім того, документи можна оновлювати щоразу, коли відбуваються будь-які зміни в таких речах, як код стану, плагіни, формати даних, функції API тощо. Використовуйте фреймворк: фреймворк — це набір інструментів і бібліотек, які можуть допомогти автоматизувати процес тестування API та гарантувати, що всі тести виконуються правильно.
Відокремте тестові дані від тестових сценаріїв. Зберігайте тестові дані окремо від тестових сценаріїв. Зберігання тестових даних у зовнішніх файлах або базах даних дозволяє легко оновлювати їх без зміни тестових сценаріїв. Це розділення також сприяє повторному використанню.
Параметризуйте тести. Параметризація дозволяє запускати той самий тест з різними вхідними даними. Це особливо корисно для тестування різних сценаріїв без дублювання тестів. Більшість фреймворків тестування підтримують параметризацію.
Інтеграція (CI). Інтегруйте автоматизовані тести API у свій конвеєр CI/CD. Це гарантує автоматичне виконання тестів із кожною зміною коду, забезпечуючи швидкий зворотний зв’язок з розробниками.
Регулярне оновлення. API розвиваються, а також ваші тести. Оновлюйте свій набір тестів після останніх змін API. Регулярно переглядайте та оновлюйте свої тест кейси, щоб запобігти помилковим негативним результатам.
API testing framework
Розуміння структури фреймворку для тестування API за допомогою Axios і Jest
Основні компоненти фреймворку
1. Axios: HTTP-клієнт
- Роль: Axios — це HTTP-клієнт для JavaScript на основі промісів, який широко використовується для надсилання асинхронних HTTP-запитів до ендпойнтів REST.
- Функції: він підтримує Promise API, перехоплювачі для обробки запитів/відповідей і автоматичне перетворення для даних JSON.
2. Jest: The Testing Suite
- Роль: Jest — це чудова платформа для тестування в JavaScript, зосереджена на простоті. Він використовується для написання, виконання та структурування тестів.
- Функції: він пропонує налаштування без конфігурації, вбудований засіб виконання тестів і бібліотеку ассертів. Jest також підтримує мокінг, включаючи Axios для контрольованих середовищ тестування.
3. Ассерти
- Роль – первірка відповіді яка буде отримана з ендпойнту.
- Функції – для детального і хорошого покриття деталей респонсу який буде отриманий. Можна перевірити конкретні дані які будуть повертатися, дані по статус коду або текст в статус тексті.
4. Налаштування тестового середовища
- Конфігурація: просте налаштування за допомогою
npmабоyarn. І Axios, і Jest встановлюються через npm і вимагають мінімальної конфігурації. - Інтеграція: Jest легко інтегрується з Axios, дозволяючи створювати запити Axios для тестування API без глобальних налаштувань проекту.
5.Репортінг
- Роль – отрманння зрозумілого і водночас достатнього для розуміння документу з тестами та результатами виконання.
- Функція – список усіх тестів які були запущені під час ітерації тестування, відображення результатів (pass OR fail), інформації про причину помилки. Ця інформація необхідна усім іншим учасникам команди (менеджери, девелопери).
Робочий процес тестування
1. Створення тестових кейсів
- Структура: тести написані на JavaScript із використанням глобальних методів Jest, таких як
describe,itіexpect. - Сценарії: тестові кейси зазвичай охоплюють низку сценаріїв, включаючи успішні запити, обробку помилок.
2. Моки (mocking) за допомогою Axios
- Призначення: імітуючи запити Axios, можна провести симуляцію різних респонсів API, дозволяючи проводити раннє та ефективне тестування.
- Реалізація: можливості імітації Jest можуть перехоплювати виклики Axios і надавати заздалегідь визначені відповіді, забезпечуючи швидке та надійне виконання тестів.
3. Ассерти
- Функція: Jest надає багатий набір методів твердження для перевірки відповідей API.
- Використання: тестувальники можуть перевіряти різні аспекти відповіді, як-от коди стану, заголовки та тіло, щоб переконатися, що API поводяться належним чином.
- Додаткові пекеджі для ассертів: в якості додаткових можна використати Chai – поширений і популярний пекедж який має широкий список ассертів на різні випадки.
4. Постійна інтеграція
- Інтеграція з інструментами CI: такі інструменти, як Jenkins або CircleCI, GitHub Actions можуть автоматично запускати ці тести під час різних подій, таких як push або pull запити.
- Перевага: забезпечує надійність API і швидке виявлення проблем.
Висновок
Поєднання Axios і Jest пропонує надійний і спрощений підхід до тестування API. Axios спрощує процес створення HTTP-запитів, а Jest надає потужну платформу для написання та виконання тестів. Цей фреймворк дає змогу забезпечувати надійність API, що зрештою призводить до створення більш стабільних і ефективних програм. Дотримуючись найкращих практик і використовуючи сильні сторони як Axios, так і Jest, команди можуть створити міцну основу для своїх стратегій тестування API.
axios review
Навіщо нам Axios
Давайте спочатку зрозуміємо, навіщо нам потрібна така бібліотека, як Axios. JavaScript уже містить вбудовані об’єкти: XMLHttpRequest і Fetch API для взаємодії з API.
Axios, на відміну від цих вбудованих об’єктів, є бібліотекою з відкритим кодом, яку нам потрібно включити в нашу програму для виконання запитів API через HTTP. Він схожий на Fetch API і повертає об’єкт JavaScript Promise, але також містить багато потужних функцій.
Однією з важливих можливостей Axios є його ізоморфна природа, яка означає, що він може працювати як у браузері, так і в серверних програмах Node.js з однаковою кодовою базою.
Axios також є HTTP-клієнтом на основі промісів, який можна використовувати як у звичайному JavaScript, так і в інших фреймворках JavaScript, таких як React, Vue.js і Angular.
Він підтримує всі сучасні браузери, включаючи підтримку IE 8 і вище.
У наступних розділах ми розглянемо приклади використання цих функцій Axios у наших програмах.
jest review
Огляд Jest для автоматизованого тестування API
Jest, чудова платформа тестування JavaScript, набула значної популярності в сфері автоматизованого тестування API. Jest, відомий своєю простотою, швидкістю та масштабованістю, забезпечує ефективну платформу для тестування API у сучасних веб-додатках. У цій статті пропонується детальний огляд функцій, переваг і застосування Jest для автоматизованого тестування API.
Основні характеристики Jest
1. Нульова конфігурація
- Простота: Jest розроблено для роботи з мінімальним налаштуванням, що робить його ідеальним вибором для швидкого впровадження.
- Автоматичне виявлення: автоматично знаходить і запускає тести, написані у вашій програмі, без необхідності додаткового налаштування.
2. Тестування знімків
Ефективність: дозволяє розробникам робити знімки відповідей API і порівнювати їх із відомими хорошими станами, забезпечуючи послідовність і надійність поведінки API.
3. Моки та шпигуни(Spies)
- Контроль: забезпечує розширену підтримку функцій і модулів імітації, що має вирішальне значення для ізоляції тестів API і симуляції різних сценаріїв.
- Спостереження: шпигуни(Spies) в Jest можуть відстежувати виклики функцій, уможливлюючи детальну перевірку взаємодії в межах API.
4. Підтримка асинхронного тестування
Гнучкість: пропонує надійну підтримку для тестування асинхронного коду, необхідного для обробки запитів і відповідей API.
5. Інтегровані звіти про покриття
Видимість: генерує детальні звіти про охоплення з коробки, надаючи розуміння перевірених і неперевірених частин кодової бази.
Переваги використання Jest для автоматизованого тестування API
1. Швидкий і масштабований
- Продуктивність: виконує тести паралельно, значно прискорюючи процес тестування, що важливо для великих кодових баз і API.
- Масштабованість: ефективно обробляє великі набори тестів, що робить його придатним як для малих, так і для великих проектів.
2. Легкий вхід
- Використання: пропонує чистий і простий у використанні синтаксис, що робить тестування більш інтуїтивно зрозумілим.
- Зворотній зв’язок: забезпечує миттєвий зворотний зв’язок щодо результатів тестування, сприяючи більш продуктивному середовищу розробки.
3. Спільнота та екосистема
- Підтримка: підтримується сильною спільнотою, яка надає розширену документацію, навчальні посібники та сторонні інтеграції.
- Розширення: багата екосистема плагінів і розширень розширює його можливості, дозволяючи налаштовувати відповідно до потреб проекту.
4. СІ
Інтеграція CI/CD: легко інтегрується з конвеєрами безперервної інтеграції та розгортання, гарантуючи автоматичне виконання тестів API у циклах розробки.
Висновок
Jest виділяється як комплексний і зручний для розробників інструмент для автоматизованого тестування API. Його поєднання простоти використання, швидкого виконання та великого набору функцій робить його чудовим вибором як для початківців, так і для досвідчених інженерів. Використовуючи можливості Jest, команди можуть забезпечити надійність і продуктивність своїх API, сприяючи загальній якості та успіху своїх програмних проектів.
Встановлення jest
Jest можна встановити з будь-яким пакетним менеджером (yarn, npm, pnpm).
Наприклад встановлення з npm:
npm i jest
І такий вигляд буде мати наш файл package.json
"devDependencies": {
"axios": "^1.6.2",
"jest": "^29.7.0",
},
Це усе – далі можна переходити до написання коду і запуску тестів з jest.
Створюємо файл з назвою sum.js і додаємо туди код (функція яка додає два числа)
function sum(a, b) {
return a + b;
}
module.exports = sum;
у sum.test.js пишемо такий тест кейс:
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Далі запускаємо цей тест кейс з jest
npx jest sum.test.js
Наступний варіант тестів з jest – створюємо файл rectangle.js і додаємо туди наступний код (вимірювання площі прямокутника)
function rectangleArea(length, width) {
if (length <= 0 || width <= 0) {
throw new Error('Length and width must be positive numbers.');
}
return length * width;
}
module.exports = rectangleArea;
І створюємо файл з тест-кейсами для перевірки нашої функції, назва повинна співпадати з назвою файлу який будемо перевіряти. rectangle.test.js
const rectangleArea = require('./rectangle');
describe('rectangleArea', () => {
test('calculates the area of a 5x2 rectangle to be 10', () => {
expect(rectangleArea(5, 2)).toBe(10);
});
test('calculates the area of a 3x3 rectangle to be 9', () => {
expect(rectangleArea(3, 3)).toBe(9);
});
test('throws an error when a negative length is provided', () => {
expect(() => rectangleArea(-5, 2)).toThrow('Length and width must be positive numbers.');
});
test('throws an error when a negative width is provided', () => {
expect(() => rectangleArea(5, -2)).toThrow('Length and width must be positive numbers.');
});
});
Команда по запуску має містити назву файлу який потрібно запустити з jest.
Встановлення axios та виконання запитів з jest (ч.1)
Запускаємо команду для інсталяції
npm install axios
якщо потрібно використати інші мененджери (brew, yarn) – ці варіанти можна знайти в документації https://axios-http.com/docs/intro
Після успішного встановлення ви отримаєте повідомлення, що пакет успішно встановлено
Для перевірки можна відкрити файл package.json і впевнитися що встановленна потрібна нам версія
{
"name": "serversideapp",
"version": "1.0.0",
"description": "",
"main": "index.js",
...
...
"dependencies": {
"axios": "^0.27.2",
"cors": "^2.8.5",
"express": "^4.18.1"
}
}
Конфігурація jest – в залежності від вашого проекту, Jest поставить вам кілька питань для точного налаштування налаштування проекту під мову, середовище запуску, використання моків і створить початковий файл конфігурації з коротким описом кожного налаштування:
npm init jest@latest
приклад генерації конфігураційного файлу (скріншот з терміналу)

Jest має багато прикладів з використання конфігів – які описані в документації https://jestjs.io/docs/configuration
Зміна стандартного тайм-ауту для jest в конфігураційному файлі.
/** @type {import('jest').Config} */
const config = {
testTimeout: 30000,
};
module.exports = config;
Завершили встановлення і перевірку – наступним кроком буде виконання першого запиту до АПІ. Для цього в файлі робимо імпорт пекеджу – в прикладі за допомогою імпорту CommonJS
const axios = require('axios');
Щоб отримати типи TypeScript (для intellisense/автокомпліт) під час використання імпорту CommonJS із require(), використовуйте такий підхід:
const axios = require('axios').default;
// axios.<method> will now provide autocomplete and parameter typings
Далі пишемо тестовий сценарій для перевірки за допомогою методу GET
const axios = require('axios')
test("Get all book list", async () => {
const response = await axios.get('https://demoqa.com/bookstore/v1/books', { //calling the get API
headers: {
'Content-Type': 'application/json',
}
});
console.log(response.data);
expect(response.status).toEqual(200); //asserting if the response code is 200
})
❗test – тест кейси
npx jest api_requests/book.test.js
Ось як виглядає код і результат виконання з терміналу vscode

Встановлення axios та виконання запитів з jest (ч.2)
Наступним кроком зробимо авторизацію юзера для виконання запитів які потребують підтвердження.
Це зробимо наступними кроками:
- запит по URL: /login для отримання авторизаційного токену
- використання токену в запиті для отримання списку усіх юзерів (це буде підтвердження коректності токену)
Будемо використовувати запит POST і для виконання потрібно body запиту
{
"email":"salman@roadtocareer.net",
"password":"1234"
}
Так буде виглядати код:
const axios = require('axios');
test("User can login successfully", async () => {
var response = await axios.post(`http://dmoney.roadtocareer.net/user/login/user/login`,
{
"email": "salman@roadtocareer.net",
"password": "1234"
},
{
headers: {
"Content-Type": "application/json",
}
})
console.log(response.data)
expect(response.data.message).toContain("Login successfully")
})
Для кращого розуміння та прикладів використання матеріалу є офіційна документація українською мовою для Jest.https://jestjs.io/uk/docs/using-matchers
Запускаємо код за допомогою раннера jest:
npx jest api_requests/user.test.js
І отримаємо результат такий же як і в попередньому прикладі.
Для подальшого використання токену і зменшення використання запиту на отримання токену до одного разу — використаємо підхід зі збереженням токену в json файлі і використанні в усіх необхідних файлах проекту. Також збережемо base URL в json файлі.
Створюємо env.json і додаємо базовий код
{
"baseUrl":"http://dmoney.roadtocareer.net",
"token":""
}
Встановимо пекедж fs для роботи з файлами
npm i fs
І код оновимо з використанням пекеджу
const axios = require('axios');
const jsonData = require('./env.json');
const fs = require('fs')
test("User can login successfully", async () => {
var response = await axios.post(`${jsonData.baseUrl}/user/login`,
{
"email": "salman@roadtocareer.net",
"password": "1234"
},
{
headers: {
"Content-Type": "application/json",
}
})
console.log(response.data)
expect(response.data.message).toContain("Login successfully")
let token_value = response.data.token;
jsonData.token = token_value;
fs.writeFileSync('env.json', JSON.stringify(jsonData))
})
Запускаємо код командою
npx jest api_requests/user.test.js
Після запуску відкриваємо файл env.json, щоб впевнитися що токен записаний і це буде підтвердженням успішного налаштування.

Далі налаштовуємо запит на отримання даних по усіх юзерах з використанням токену в інших запитах
test("Admin can get user list", async () => {
var response = await axios.get(`${jsonData.baseUrl}/user/list`,
{
headers: {
"Content-Type": "application/json"
}
})
console.log(response.data.users);
})
Команда для запуску цього тест кейсу
npx jest api_requests/user.test.js
В результаті отримуємо помилку і респонс статус код 401 (Authorization error) -, тому що у нас не налаштований процес передачі токену в хедерах
Для конфігурації передачі токену потрібно в запит додати хедер
‘Authorization': jsonData.token
і тоді наш код буде мати вигляд
test("Admin can get user list", async () => {
var response = await axios.get(`${jsonData.baseUrl}/user/list`,
{
headers: {
"Content-Type": "application/json",
"Authorization": jsonData.token
}
})
console.log(response.data.users);
})
Для запуску використаємо ту ж саму команду
npx jest api_requests/user.test.js
І в результаті тести будуть успішні
- User can login successfully
- Admin can get user list

Перевірки респонсу можна зробити за допомогою розуміння структури респонсу і методів axios. Передати через слово .then обєкт респонсу і вивести дані в консоль
axios.get(`${jsonData.baseUrl}/user/list`)
.then(function (response) {
console.log(response.data);
console.log(response.status);
console.log(response.statusText);
console.log(response.headers);
console.log(response.config);
});
, або використати expect з списку матчерів
expect(response.data.message).toContain("Login successfully")
Практичне завдання:
1. встановити бібліотеку Jest https://jestjs.io/docs/getting-started
2. Додати підказки https://stackoverflow.com/questions/57874114/intellisense-for-jest-not-working-in-vs-code {
“typeAcquisition”: {
“include”: [
“jest”
]
}
} і команда npm install @types/jest
3. create a sum.js file:
function sum(a, b) {
return a + b;
}
module.exports = sum;
4. create a file named sum.test.js. This will contain our actual test:
const sum = require(‘./sum’);
test(‘adds 1 + 2 to equal 3’, () => {
expect(sum(1, 2)).toBe(3);
});
5. run test : npx jest sum.test.js