היי כולם הטסטים שלי תלויים בAPI KEY ובלעדיו הם יכשלו…
אני לא יכול ליצור אובייקט שמחקה את מה שהAPI אמור להחזיר לי כי צריך לשלוח את האובייקט בבקשת רשת ואם הוא לא תואם את הנתונים הרצויים זה זורק שגיאה (access_token)
איך אפשר לעבור את זה?
תודה לעוזרים!
Yam
היי
ניסית לקרוא על API Mocking?
Liran_C
כן, הבעיה היא שאני לא יכול לחקות את המידע כי אני צריך לשלוח חזרה את מה שקיבלתי ואי אפשר לזייף את זה…
מה אפשר לעשות במצב הזה?
Yam
אפשר לראות דוגמאות לזה?
Liran_C
כאילו אני יכול ליצור אובייקט הוא פשוט לא valid ואם אני עושה איתו בקשה זה לא יתן לי את המידע שאני מבקש…
אני משתמש בgoogle calendar api.
זה אומר שאני צריך לשלוח בקשה כדי לקבל גישה לapi ועם המידע שחוזר לשלוח אותו לapi עצמו ורק אז הוא מחזיר לי אירועים וכאלה.
אילו דוגמאות אני יכול לשלוח ?
Yam
דוגמאות של הבקשות שאתה שולח, ה־JSON/בקשה שיוצאים וה־JSON שמתקבל (בניכוי פרטים אישיים).
ה־Mock לא צריך להיות Valid מול השירות האמיתי, זה הרעיון מאחורי ה־Mock.
אמורות להיות לך הרבה פונקציות שרק חלק קטן מאוד מהן אחראיות על התקשורת מול השרת.
לחלק הזה אתה עושה monkey patch ודואג שבמקום שהבקשה תצא לאינטרנט היא תפנה לפונקציה מסוימת ותקבל מידע שזייפת, ודומה מאוד לתשובת השרת לבקשה שלך.
על המידע הזה אתה עושה את הבדיקות בשאר הפונקציות, כדי לוודא שהן עובדות (אני מניח שלא 100% ממה שכתבת הוא תקשורת עם השרת של גוגל )
Liran_C
אני משתמש בספריות של גוגל ככה שאני לא צריך להתעסק עם JSON הרבה כי זה פשוט מחזיר לי אובייקטים (אובייקטים של google כאלה שמגיעים מהספריות שלהם).
שאני מתעסק עם JSON זה בדרך כלל שאני מקבל את האירועים וזה לא בעיה…
אני יכול לשלוח תמונות של קטעים מהקוד ולהגיד לך איזה אובייקטים הם מחזירים (בדרך כלל אובייקטים של google)
זה משהו שיעזור?
רוב הקוד פונה לשרתים של גוגל, ככה שאני תמיד חייב response מהם.
אשמח להסבר או מדריך לאיך לעשות את זה נכון, אם אפשר?
הבעיה היא יותר כללית בגלל זה קשה למקד אותה, מה אתה מציע לעשות?
תודה רבה
Yam
אני מציע גישה שאולי מעט פשוטה יותר.
הקוד שלך בנוי מפונקציות. בהגדרה, ישנה פונקציה אחת לפחות שלא קוראת לפונקציות נוספות – נקרא לה “היחידה הבסיסית”.
אני מבקש ממך להצביע על אותה יחידה בסיסית בשם שלה (נניח authenticate_user_from_form, סתם זורק), להגיד לי באיזה קובץ ושורה בקישור שנתת היא מופיעה (נניח: בקובץ users.py בשורה 50), ולהסביר לי איפה התקשית לבנות עבורה טסט (נניח: אני לא בטוח איך לעשות Mock לפונקציה google.Authenticate כיוון שהיא אמורה לדבר עם השרתים של גוגל)
Liran_C
היחידה הבסיסית היא: db_cleanup בשורה 134.
עבורה אין בעיה לכתוב טסט…
האחרות דורשות קשר לAPI הן הבעיה.