אירוח ממשק API נושא באחריות לוודא שהוא עובד. אין דרך טובה יותר או קלה יותר לעשות זאת מאשר בדיקות אוטומטיות עם כלי כמו Mocha.
פיתוח תוכנה מודרני עושה שימוש רב בממשקי API. הם משמשים כקישור מכריע בין יישומים בצד הלקוח ויישומי קצה, כמו גם בין אפליקציות פנימיות או חיצוניות שונות.
ממשקי API מאפשרים תקשורת וחילופי נתונים חלקים, ומאפשרים לרכיבי תוכנה לקיים אינטראקציה חלקה זה עם זה. הבטחת האמינות, הפונקציונליות והביצועים של ממשקי API אלה היא בעלת חשיבות עליונה כדי לספק חווית משתמש חלקה ולשמור על השלמות הכוללת של המערכת.
לכן חשוב לבדוק ביסודיות את ממשקי ה-API שלך כדי לסמן ולתקן באגים במהלך הפיתוח כדי למנוע כשלים פוטנציאליים במערכת בסביבות ייצור.
בדיקת ממשקי API של Node.js באמצעות Mocha, Chai ו-Chai-HTTP
מוקה היא מסגרת בדיקה בשימוש נרחב התואמת למגוון מסגרות JavaScript. אחד ממאפייני המפתח שלו הוא רץ בדיקה גמיש המפשט את תהליך הניהול והביצוע של מקרי בדיקה בצורה יעילה.
זה גם תומך בסגנונות בדיקה שונים, כולל בדיקות סינכרוניות וא-סינכרוניות, המאפשרים מגוון רחב של תרחישי בדיקה.
מצד שני, חי ו צ'אי-HTTP הן ספריות הצהרות שבהן אתה יכול להשתמש בשילוב עם מוקה. Chai מספק מגוון רחב של ממשקי קביעה אקספרסיביים וקריאים כגון צריך, צפוי וטענה. בעוד, Chai-HTTP, הרחבה של Chai, מספקת ממשק שתוכנן במיוחד לבדיקת בקשות HTTP והצהרת תגובותיהן.
על ידי שימוש ב-Mocha בשילוב עם Chai ו-Chai-HTTP, אתה יכול לבדוק ממשקי API ביעילות. זרימת העבודה של הבדיקה כוללת:
- ביצוע בקשות HTTP לנקודות הקצה שצוינו ב-API.
- הגדרת התגובות הצפויות.
- אימות הנתונים שהתקבלו מהמקור שצוין, קודי מצב ה-HTTP ועוד.
אתה יכול גם לדמות תרחישי בדיקת שגיאות API שעלולים להופיע במצבים כאלה ואילו פעולות אמורות להפעיל במקרה שהן מתרחשות.
אתה יכול למצוא את הקוד של הפרויקט הזה בו מאגר GitHub.
הגדר את Express.js Project ואת מסד הנתונים של MongoDB
להתחיל, ליצור שרת אינטרנט Express, והתקן את החבילות הבאות:
npm להתקין cors dotenv mongoose mongodb
הַבָּא, צור מסד נתונים MongoDB אוֹ להגדיר אשכול MongoDB בענן. לאחר מכן העתק את כתובת האתר של חיבור מסד הנתונים, צור א .env קובץ בספריית השורש, והדבק במחרוזת החיבור של מסד הנתונים:
CONNECTION_STRING="מחרוזת חיבור"
כדי לסיים את תהליך ההגדרה, עליך להגדיר את חיבור מסד הנתונים ולהגדיר את דגמי הנתונים עבור נתוני המשתמש שלך. עיין בקוד במאגר GitHub של פרויקט זה כדי:
- הגדר את חיבור מסד הנתונים, ב utils/db.js.
- הגדר את סכימת נתוני המשתמש ב models/user.model.js.
הגדר את פונקציות המטפל עבור נתיבי ה-API
פונקציות הבקר ינהלו את ההוספה והשליפה של נתוני המשתמש במסד הנתונים. כדי להבטיח את הפונקציונליות של פונקציות המטפל הללו, תבדוק אם הן מצליחות לפרסם ולהביא נתונים ממסד הנתונים.
בספריית השורש, צור א controllers/userControllers.js קובץ והוסיפו את הקוד הבא:
const משתמש = לִדרוֹשׁ('../models/user.model');
exports.registerUser = אסינכרון (req, res) => {
const { שם משתמש, סיסמה } = req.body;לְנַסוֹת {
לְהַמתִין User.create({ שם משתמש, סיסמה});
res.status(201).לִשְׁלוֹחַ({ הוֹדָעָה: 'משתמש נרשם בהצלחה' });
} לתפוס (שגיאה) {
לְנַחֵם.log (שגיאה);
res.status(500).לִשְׁלוֹחַ({ הוֹדָעָה: 'התרחשה שגיאה!! ' });
}
};
exports.getUsers = אסינכרון (req, res) => {
לְנַסוֹת {
const משתמשים = לְהַמתִין User.find({});
res.json (משתמשים);
} לתפוס (שגיאה) {
לְנַחֵם.log (שגיאה);
res.status(500).לִשְׁלוֹחַ({ הוֹדָעָה: 'התרחשה שגיאה!!' });
}
};
הגדר את נתיבי ה-API
ליצור חדש routes/userRoutes.js קובץ בספריית השורש והוסף את הקוד הבא.
const express = לִדרוֹשׁ('אֶקְסְפּרֶס');
const נתב = אקספרס. נתב();
const userControllers = לִדרוֹשׁ('../controllers/userControllers');
router.post('/api/register', userControllers.registerUser);
router.get('/api/users', userControllers.getUsers);
מודול.exports = נתב;
הגדר את נקודת הכניסה לשרת שלך
עדכן את שלך server.js קובץ עם הקוד הבא.
const express = לִדרוֹשׁ('אֶקְסְפּרֶס');
const cors = לִדרוֹשׁ('קורס');
const app = express();
const יציאה = 5000;
לִדרוֹשׁ('dotenv').config();
const connectDB = לִדרוֹשׁ('./utils/db');connectDB();
app.use (express.json());
app.use (express.urlencoded({ מורחב: נָכוֹן }));
app.use (cors());const userroutes = לִדרוֹשׁ('./routes/userRoutes');
app.use('/', UserRoutes);app.listen (פורט, () => {
לְנַחֵם.עֵץ(`השרת מאזין ל http://localhost:${port}`);
});
מודול.exports = app;
כתוב ובצע את מקרי הבדיקה עם מוקה
עם ממשק ה-API של המשתמש, קדימה להגדיר את סביבת הבדיקה. ראשית, התקן את החבילות הללו כתלות במפתחים.
npm להתקין mocha chai chai-http --save-dev
כעת, הוסף את הסקריפט הבא לקובץ package.json שלך.
"תסריטים": {
"מִבְחָן": "מוקה --פסק זמן 10000"
},
פקודה זו תבצע את מקרי הבדיקה - הוספת מאפיין הזמן הקצוב עם ערך מתאים מאפשרת לך לשלוט בזמן המקסימלי המותר לביצוע מקרי בדיקה בודדים.
זה יכול להיות שימושי כדי למנוע מבדיקות לפעול ללא הגבלת זמן או להסתיים מהר מדי לפני שמקרי הבדיקה הסתיימו.
בדוק את נקודות הקצה של ה-API
בספריית השורש, צור תיקיה חדשה ושמה לה מִבְחָן. בתוך תיקיה זו, צור חדש user.tests.js קובץ והוסף את הקוד הבא עבור מקרה הבדיקה של נקודת הקצה של POST.
const צ'אי = לִדרוֹשׁ('צ'אי');
const chaiHttp = לִדרוֹשׁ('chai-http');
const אפליקציה = לִדרוֹשׁ('../שרת');chai.use (chaiHttp);
const expect = chai.expect;לְתַאֵר('משתמש API', () => {
לְתַאֵר('POST /api/register', () => {
זה('צריך לטפל ברישום משתמש', (בוצע) => {
chai.request (אפליקציה)
.הודעה('/api/register')
.לִשְׁלוֹחַ({ שם משתמש: 'testUser', סיסמה: 'סיסמת בדיקה' })
.סוֹף((טעות, מילואים) => {
אם (שגיאה) {
expect (res).to.have.status(500);
expect (res.body).to.have.property('הוֹדָעָה').זה.שווה('התרחשה שגיאה!!');
} אַחֵר {
expect (res).to.have.status(201);
expect (res.body).to.have.property('הוֹדָעָה').שווה('משתמש נרשם בהצלחה');
}
בוצע();
});
});
});
});
קוד זה מגדיר מקרה בדיקה באמצעות Chai ו-Chai HTTP לבדיקת פונקציונליות רישום המשתמש של ה-API של המשתמש.
הוא שולח בקשת POST לנקודת הקצה שצוינה ומציג הצהרות לגבי תגובת ה-API הצפויה, ומוודא אם פונקציונליות רישום המשתמש הצליחה או אם אירעה שגיאה.
להלן פירוט של המרכיבים העיקריים של מקרה הבדיקה:
- לְצַפּוֹת -אובייקט זה מאפשר לך להשתמש בשיטות הטענה של Chai כדי להצהיר על התגובה הצפויה מה-API.
- לְתַאֵר - הוא מתאר מקרי בדיקה קשורים יחדיו, במקרה זה, בדיקות הקשורות ל- משתמש API. החסימה המקוננת מתארת קבוצות נוספות הקשורות למקרי בדיקה יחד, במקרה זה, ה POST /api/register. זה עוזר לארגן את מקרי הבדיקה הקשורים ספציפית לפונקציונליות מסוימת.
- זה - פונקציה זו מתארת את ההתנהגות הצפויה של נקודת הקצה של ה-API.
- סוֹף - פונקציה זו שולחת את הבקשה ומספקת פונקציית התקשרות חזרה לטיפול בתגובה. פונקציית ה-callback מבצעת קביעות באמצעות ה- לְצַפּוֹת פונקציה לבדיקת התגובה שהתקבלה מה-API.
- בוצע - פונקציה זו פועלת כדי לסמן את סוף מקרה הבדיקה.
לבסוף, הוסף את הקוד עבור מקרה הבדיקה של נקודת הקצה של GET מיד לאחר מקרה הבדיקה של נקודת הקצה של POST.
לְתַאֵר('GET /api/users', () => {
זה('צריך להביא את כל נתוני המשתמש', (בוצע) => {
chai.request (אפליקציה)
.לקבל('/api/users')
.סוֹף((טעות, מילואים) => {
אם (שגיאה) {
expect (res).to.have.status(500);
expect (res.body).to.have.property('הוֹדָעָה').זה.שווה('אירעה שגיאה בעת שליפת נתוני משתמש');
} אַחֵר {
expect (res).to.have.status(200);
expect (res.body).to.be.an('מַעֲרָך');
}
בוצע();
});
});
});
קדימה, הפעל את סקריפט הבדיקה בטרמינל שלך כדי לבצע את שני מקרי הבדיקה.
מבחן npm
אם ביצוע מקרי הבדיקה לא נתקל בשגיאות, אתה אמור לראות פלט דומה המצביע על כך שהבדיקות עברו בהצלחה.
כשלים בבדיקה יכולים להתרחש מסיבות שונות, כגון בעיות קישוריות לרשת במהלך בקשות HTTP למסד הנתונים, חסרים נתונים נדרשים, שגיאות לוגיות ובעיות אחרות.
Mocha עושה עבודה טובה בזיהוי והדגשת שגיאות כאלה, ומספקת דוחות בדיקה ברורים ומפורטים ביומנים המוצגים בחלון הטרמינל. זה מאפשר לך לזהות ולאבחן בקלות את הבעיות הספציפיות שגרמו לכשלים בבדיקה.
Mocha לא נותן לך תירוץ לא לבדוק את ממשקי ה-API שלך
בעוד בדיקה ידנית של הפונקציונליות של ממשקי ה-API שלך באמצעות כלים כמו Postman היא בדיקה חוקית גישה, מינוף Mocha ומסגרות בדיקה אחרות לבדיקות אוטומטיות לוקח את זה לשלב הבא רָמָה.
עם כלי בדיקה אלה, אתה יכול להפוך בדיקות לאוטומטיות במהירות ובקלות כדי לכסות מגוון רחב של תרחישים ומקרי קצה. זה מאפשר לך לזהות באגים במהירות ולפתור אותם לפני פריסת ממשקי ה-API שלך, מה שמבטיח שאתה שולח תוכנה באיכות גבוהה לייצור.