Хостирането на API носи отговорност да се гарантира, че работи. Няма по-добър или по-лесен начин да направите това от автоматизирано тестване с инструмент като Mocha.
Съвременната разработка на софтуер използва отлично API. Те служат като важна връзка между приложенията от страна на клиента и задните приложения, както и между различни вътрешни или външни приложения.
API позволяват гладка комуникация и обмен на данни, позволявайки на софтуерните компоненти безпроблемно да взаимодействат помежду си. Гарантирането на надеждността, функционалността и производителността на тези API е от изключителна важност за предоставяне на безпроблемно потребителско изживяване и поддържане на цялостната цялост на системата.
Ето защо е важно да тествате щателно вашите API, за да маркирате и коригирате грешки по време на разработката, за да предотвратите потенциални системни повреди в производствените среди.
Тестване на Node.js API с помощта на Mocha, Chai и Chai-HTTP
Мока е широко използвана рамка за тестване, която е съвместима с различни
JavaScript рамки. Една от основните му характеристики е гъвкав тестов инструмент, който опростява процеса на управление и ефективно изпълнение на тестови случаи.Той също така поддържа различни стилове на тестване, включително синхронно и асинхронно тестване, което позволява широк набор от сценарии за тестване.
От друга страна, Чай и Чай-HTTP са библиотеки за твърдения, които можете да използвате заедно с Mocha. Chai предоставя широк набор от изразителни и четливи интерфейси за твърдения, като например трябва, очаква и твърди. Докато Chai-HTTP, разширение на Chai, предоставя интерфейс, специално проектиран за тестване на HTTP заявки и утвърждаване на техните отговори.
Като използвате Mocha във връзка с Chai и Chai-HTTP, можете ефективно да тествате API. Работният процес на тестване включва:
- Правене на HTTP заявки към посочените крайни точки на API.
- Определяне на очакваните отговори.
- Валидиране на получените данни от посочения източник, HTTP статус кодовете и др.
Можете също така да симулирате тестови сценарии за грешка на API, които могат да възникнат в такива ситуации и какви действия трябва да се задействат в случай, че се появят.
Можете да намерите кода на този проект в него GitHub хранилище.
Настройте проекта Express.js и базата данни MongoDB
За да започнете, създайте експресен уеб сървъри инсталирайте тези пакети:
npm инсталирайте cors dotenv mongoose mongodb
Следващия, създайте база данни MongoDB или конфигурирайте MongoDB клъстер в облака. След това копирайте URL адреса за връзка с базата данни, създайте a .env файл в главната директория и поставете в низа за връзка с базата данни:
CONNECTION_STRING="низ за свързване"
За да завършите процеса на настройка, трябва да конфигурирате връзката към базата данни и да дефинирате моделите на данни за вашите потребителски данни. Обърнете се към кода в хранилището на GitHub на този проект, за да:
- Конфигурирайте връзката с базата данни, в utils/db.js.
- Дефинирайте схемата на потребителските данни в модели/user.model.js.
Дефинирайте функциите на манипулатора за API маршрутите
Функциите на контролера ще управляват добавянето и извличането на потребителски данни в базата данни. За да гарантирате функционалността на тези манипулиращи функции, ще тествате дали те могат успешно да публикуват и извличат данни от базата данни.
В основната директория създайте a контролери/userControllers.js файл и добавете следния код:
конст Потребител = изискват('../models/user.model');
exports.registerUser = асинхронен (req, res) => {
конст {потребителско име, парола} = req.body;опитвам {
изчакайте User.create({ потребителско име, парола});
res.status(201).изпрати({ съобщение: „Потребителят се регистрира успешно“ });
} улов (грешка) {
конзола.log (грешка);
res.status(500).изпрати({ съобщение: 'Възникна грешка!! ' });
}
};
exports.getUsers = асинхронен (req, res) => {
опитвам {
конст потребители = изчакайте User.find({});
res.json (потребители);
} улов (грешка) {
конзола.log (грешка);
res.status(500).изпрати({ съобщение: 'Възникна грешка!!' });
}
};
Дефинирайте API маршрутите
Създайте нов маршрути/userRoutes.js файл в основната директория и добавете следния код.
конст експрес = изискват("експресен");
конст рутер = експрес. Рутер();
конст потребителски контролери = изискват('../controllers/userControllers');
router.post('/api/register', userControllers.registerUser);
router.get('/api/потребители', userControllers.getUsers);
модул.exports = рутер;
Определете вашата входна точка на сървъра
Актуализирайте своя server.js файл със следния код.
конст експрес = изискват("експресен");
конст корс = изискват("корс");
конст приложение = експрес();
конст порт = 5000;
изискват('dotenv').config();
конст connectDB = изискват('./utils/db');свържетеDB();
app.use (express.json());
app.use (express.urlencoded({ удължен: вярно }));
app.use (cors());конст userRoutes = изискват('./routes/userRoutes');
app.use('/', userRoutes);app.listen (порт, () => {
конзола.log(`Сървърът слуша http://localhost:${порт}`);
});
модул.exports = приложение;
Напишете и изпълнете тестовите случаи с Mocha
С потребителския API на място, продължете напред и конфигурирайте тестовата среда. Първо инсталирайте тези пакети като зависимости за разработчици.
npm инсталирайте мока чай чай-http --save-dev
Сега добавете следния скрипт към вашия файл package.json.
"скриптове": {
"тест": "mocha --timeout 10000"
},
Тази команда ще изпълни тестовите случаи – добавянето на свойството timeout с подходяща стойност ви позволява да контролирате максималното време, разрешено за изпълнение на отделни тестови случаи.
Това може да бъде полезно за предотвратяване на тестовете да се изпълняват безкрайно или да завършват твърде бързо, преди тестовите случаи да са приключили.
Тествайте крайните точки на API
В главната директория създайте нова папка и я наименувайте тест. В тази папка създайте нова user.tests.js файл и добавете следния код за тестовия случай на крайна точка на POST.
конст чай = изискват("чай");
конст chaiHttp = изискват("чай-http");
конст приложение = изискват(„../сървър“);chai.use (chaiHttp);
конст очаквам = chai.expect;описвам(„Потребителски API“, () => {
описвам(„POST /api/register“, () => {
то(„трябва да обработва регистрацията на потребител“, (готово) => {
chai.request (приложение)
.post('/api/register')
.изпрати({ потребителско име: „testUser“, парола: 'testpassword' })
.край((грешка, рез) => {
ако (грешка) {
очаквам (res).to.have.status(500);
очаквам (res.body).to.have.property("съобщение").that.is.equal('Възникна грешка!!');
} друго {
очаквам (res).to.have.status(201);
очаквам (res.body).to.have.property("съобщение").equal(„Потребителят се регистрира успешно“);
}
Свършен();
});
});
});
});
Този код дефинира тестов случай с помощта на Chai и Chai HTTP за тестване на функционалността за регистрация на потребител на потребителския API.
Той изпраща POST заявка до посочената крайна точка и прави твърдения за очаквания API отговор, като проверява дали функцията за регистрация на потребител е била успешна или е възникнала грешка.
Ето разбивка на основните компоненти на тестовия случай:
- очаквам -Този обект ви позволява да използвате методите за твърдения на Chai, за да правите твърдения относно очаквания отговор от API.
- описвам - Описва заедно свързани тестови случаи, в този случай тестове, свързани с Потребителски API. Вложеният блок за описание допълнително групира заедно свързани тестови случаи, в този случай, the POST /api/register. Това помага да се организират тестовите случаи, специално свързани с определена функционалност.
- то - Тази функция описва очакваното поведение на крайната точка на API.
- край - Тази функция изпраща заявката и предоставя функция за обратно извикване за обработка на отговора. Функцията за обратно извикване изпълнява твърдения, използвайки очаквам функция за проверка на отговора, получен от API.
- Свършен - Тази функция се изпълнява, за да отбележи края на тестовия случай.
Накрая добавете кода за тестовия случай на крайна точка GET веднага след тестовия случай на крайна точка POST.
описвам(„GET /api/users“, () => {
то("трябва да извлече всички потребителски данни", (готово) => {
chai.request (приложение)
.get('/api/потребители')
.край((грешка, рез) => {
ако (грешка) {
очаквам (res).to.have.status(500);
очаквам (res.body).to.have.property("съобщение").that.is.equal(„Възникна грешка при извличане на потребителски данни“);
} друго {
очаквам (res).to.have.status(200);
очаквам (res.body).to.be.an("масив");
}
Свършен();
});
});
});
Продължете и стартирайте тестовия скрипт на вашия терминал, за да изпълните двата тестови случая.
npm тест
Ако изпълнението на тестовите случаи не срещне никакви грешки, трябва да видите подобен резултат, показващ, че тестовете са преминали успешно.
Неуспешни тестове могат да възникнат поради различни причини, като проблеми с мрежовата свързаност по време на HTTP заявки към базата данни, липсващи необходими данни, логически грешки и други проблеми.
Mocha върши добра работа за идентифициране и подчертаване на такива грешки, предоставяйки ясни и подробни тестови отчети в регистрационните файлове, показани в прозореца на терминала. Това ви позволява лесно да идентифицирате и диагностицирате конкретните проблеми, които са причинили неуспешните тестове.
Mocha не ви дава извинение да не тествате своите API
Докато ръчното тестване на функционалността на вашите API с помощта на инструменти като Postman е валидно тестване подход, като използва Mocha и други рамки за тестване за автоматизирано тестване, го издига до следващия ниво.
С тези инструменти за тестване можете бързо и лесно да автоматизирате тестове, за да покриете широк набор от сценарии и крайни случаи. Това ви позволява бързо да откривате грешки и да ги разрешавате, преди да внедрите вашите API, като гарантирате, че изпращате висококачествен софтуер до производството.