Тестването на приложението е важно, защото гарантира, че кодът работи както трябва и че всички промени, направени в кода, не нарушават съществуващата функционалност. Писането на тестове позволява на разработчиците бързо и лесно да идентифицират и коригират грешки, спестявайки време и ресурси в дългосрочен план. Освен това, тестването може да помогне за подобряване на цялостното качество и поддържаемостта на кодовата база, което я прави по-лесна за разбиране и работа с други разработчици. В нашата статия ще се съсредоточим върху интеграционното тестване с шега.

Jest е добре позната рамка за тестване на JavaScript за извършване на интеграционни тестове на уеб приложения.

Тази статия ще предостави общ преглед на рамката и нейните характеристики, както и ръководство стъпка по стъпка за това как да настроите и стартирате интеграционни тестове с Jest. Ще обхване и някои най-добри практики и съвети за писане на ефективни тестове за интегриране на Jest. Като цяло, тази статия ще предостави изчерпателно ръководство за тестване на интеграцията на Jest и ще помогне на разработчиците да осигурят правилното функциониране на техните уеб приложения.

Това е, нека да започнем,

Тестването на API (интерфейс за програмиране на приложения) е вид софтуерно тестване, което включва директно тестване на API и като част от интеграционното тестване, за да се види дали отговарят на очакванията за функционалност, надеждност, производителност и сигурност. API тестването може да се извърши на три нива: единица, функционалност и от край до край. Може да се използва за тестване на функционалността на един API, производителността на група API или функционалността от край до край на приложение с множество API. Може да се използва в широк набор от проекти за разработка на софтуер, включително мобилни приложения, уеб приложения и микроуслуги.

Какво е интеграционно тестване? ще бъдат обсъдени в следващия раздел.

Интеграционното тестване е вид софтуерно тестване, което изследва как различните компоненти на системата взаимодействат един с друг. Това се постига чрез комбиниране на отделни единици код и тестването им като група, за разлика от тестването на всяка единица поотделно. Целта на интеграционното тестване е да идентифицира и разреши всички проблеми, които могат да възникнат, когато различните компоненти на системата се комбинират.

Предпоставките ще бъдат обсъдени в следващия раздел.

  • Node.js и npm (или yarn) са инсталирани на вашата машина.
  • Node.js API или приложение, което искате да тествате.
  • Jest и пакетът jest-cli са инсталирани като зависимост от разработчици във вашия проект. Можете да направите това, като стартирате npm install --save-dev jest jest-cli
  • Разбиране на JavaScript.
  • Разбиране на API, който тествате, и неговите крайни точки.

Този раздел ще ви научи как да пишете интеграционни тестове, както и някои от очарователните функции, които Jest предоставя, за да улесните тестването.

Преди да започнем да пишем тестове, помислете за следното:

Създайте крайните точки за гореспоменатата логика, тествайте крайните точки на API с Postman и след това се върнете, за да продължите да пишете тестовата част.

За да започнете да използвате Jest за тестване на интеграция в Node.js API, първо трябва да инсталирате пакета Jest. Това може да се постигне чрез подаване на следната команда:
npm install --save-dev jest

След като инсталираме пакета, трябва да конфигурираме нашите тестове да използват Jest. Във вашия package.json заменете следния раздел:

"scripts": { "test": "echo \"Error: no test specified\" && exit 1" },

с:

Изискваме и друг конфигурационен файл; създайте файл в корена на проекта, наречен jest.config.js, и добавете следния код:

Supertest е друг важен модул, който работи ръка за ръка с Jest. Това значително ще опрости тестването на нашите крайни точки. В резултат на това го инсталираме, както следва:

npm install --save-dev supertest

Създайте папка в главната директория и я наименувайте __test__. В тази папка създайте файл и го наречете testDBSetup.js

Създаваме базата данни, но ще използваме mongoose-mock, за да се подиграем с Mongoose и да тестваме вашия API с реални заявки, без да докосваме истинската база данни.

Инсталирайте Mongoose и пакета mongoose-mock, като изпълните следната команда:

npm install mongoose mongoose-mock

Вътре в testDBSetup.js вмъкнете следния код:

const mockgoose = require('mockgoose'); mockgoose(mongoose);

Във вашия конфигурационен файл на Jest настройте свойството setupFilesAfterEnv, за да включите mongoose файла:

"setupFilesAfterEnv": ["./__test__/testDBSetup.js"]

Вече можете да използвате Mongoose във вашите тестове както обикновено и всички операции с бази данни ще бъдат подигравани. Можете например да създадете нов модел Post:

След това можете да използвате вашата тестова база данни, за да създавате, четете, актуализирате и изтривате записи, без да се налага да се свързвате с истински MongoDB клъстер. Когато пишете тестове с Jest, трябва да сте запознати със следните термини и концепции:

Тестови пакети: Колекция от тестови случаи, които са групирани. В Jest се създава тестов пакет с помощта на describe() function.

Тестови случаи: Индивидуален тест, който проверява конкретно поведение на вашия код. В Jest се създава тестов случай с помощта на test() function.

Твърдения: Изявления, които проверяват дали резултатът от тестов случай съответства на очаквания резултат. Jest предоставя няколко вградени функции за твърдения, като expect(), toBe() и toEqual().

Мокове: Начин за замяна на конкретна функция или модул с тестова реализация. Това ви позволява да тествате как вашият код се държи при конкретни условия или сценарии. В Jest макетите се създават с помощта на функцията jest.fn().

Настройка и премахване: Възможност за изпълнение на специфичен код преди и след всеки тестов случай. В Jest можете да използвате функциите beforeEach() и afterEach(), за да настроите и разрушите вашата тестова среда.

Асинхронни тестове: Тестове, които включват код, който се изпълнява асинхронно, като обещания или обратни извиквания. В Jest можете да използвате ключовата дума async и done callback за обработка на асинхронни тестове.

Като разберете тези термини и концепции, сега можете да пишете ефективни тестове.

1. Създайте крайна точка на публикация

Направете файл с име addPost.test.js в папката __test__. поставете следния код тук:

В предходния тестов случай изпращаме POST заявка до крайната точка за създаване на публикация с примерни данни за публикация. След това се твърди, че отговорът е същият като изпратените данни. Ето как крайната точка на API работи на практика. Можем също да видим, че кодът на състоянието е 201, което показва успех.

2. Вземете всички крайни точки на Post

Направете файл с име getPosts.test.js в папката __ test__. поставете следния код тук:

it('should return all posts', async () => { const res = await request(app).get('/posts'); expect(res.status).toBe(200); expect(res.body).toBeInstanceOf(Array); });

Заявка GET, която очаква всички тестови публикации на базата данни да бъдат върнати.

3. Вземете една Post Endpoint

Направете файл с име getPost.test.js в папката __ test__. поставете следния код тук:

В този случай ние правим GET заявка с конкретен идентификатор на публикация и след това проверяваме дали отговорът съдържа правилните данни.

Направете файл с име updatePost.test.js в папката __ test__. поставете следния код тук:

В този тестов случай изпращаме PUT заявка за актуализиране на подробностите за конкретна публикация. След това очакваме отговорът да включва актуализираните данни за публикациите.

5. Изтрийте крайна точка на публикация

Направете файл с име deletePost.test.js в папката __ test__. поставете следния код тук:

Тестването на крайната точка за изтриване също е лесно; всичко, което трябва да направим, е да изпратим заявка за ИЗТРИВАНЕ до крайната точка за изтриване и да проверим дали сме получили правилния отговор.

Това е всичко. Успяхме да напишем тестове за всички крайни точки. Ако вече сте настроили приложението, npm run test за да видите дали работи.

Ето резултата след стартирането му:

Най-добрият начин за тестване на REST API е да използвате комбинация от ръчно и автоматизирано тестване.

Ръчното тестване включва изпращане на заявки до API и ръчна проверка на отговорите с инструменти като Postman или curl. Това е полезно за бързо тестване на основната функционалност на API и изследване на неговите функции.

Тестването на автоматизацията включва създаване на скриптове или програми, които изпращат заявки към API и валидират отговорите. Това е полезно за регресионно тестване, като се гарантира, че новите промени на API не нарушават съществуващата функционалност.

Когато тествате вашия REST API, имайте предвид следните точки:

1. Тествайте поне най-важните крайни точки на API

2. Тествайте API с различни входове, за да сте сигурни, че може да се справи с различни сценарии.

3. Уверете се, че обработката на грешки на API връща значими съобщения за грешка и HTTP кодове за състояние.

4. Оценете производителността и скалируемостта на API, за да се уверите, че може да обработва голям обем от заявки.

Също така е добра идея да използвате рамка за тестване като Jest.

Jest е ефективен инструмент за интеграционно тестване, тъй като има няколко функции, като асинхронно тестване, подигравка и тестване на моментни снимки, които го правят идеален за тестване на взаимодействията между различни компоненти или модули във вашето приложение. Jest също е популярен сред разработчиците поради простия си синтаксис и вградената библиотека за твърдения.

Тази статия обхваща следните теми:

1. Какво точно представлява интеграционното тестване?

2. Как да инсталирате и конфигурирате Jest за интеграционно тестване

3. Писане и изпълнение на интеграционни тестове с Jest

Надявам се, че тази статия ви е помогнала да разберете интеграционното тестване с Jest и как можете да го използвате, за да подобрите цялостното качество на вашето приложение.

Първоначално публикувано на адрес https://scanairobi.hashnode.dev.