טסטים ללא API KEY

היי כולם הטסטים שלי תלויים בAPI KEY ובלעדיו הם יכשלו…
אני לא יכול ליצור אובייקט שמחקה את מה שהAPI אמור להחזיר לי כי צריך לשלוח את האובייקט בבקשת רשת ואם הוא לא תואם את הנתונים הרצויים זה זורק שגיאה (access_token)

איך אפשר לעבור את זה?
תודה לעוזרים!

היי :slight_smile:
ניסית לקרוא על API Mocking?

כן, הבעיה היא שאני לא יכול לחקות את המידע כי אני צריך לשלוח חזרה את מה שקיבלתי ואי אפשר לזייף את זה…
מה אפשר לעשות במצב הזה?

אפשר לראות דוגמאות לזה?

כאילו אני יכול ליצור אובייקט הוא פשוט לא valid ואם אני עושה איתו בקשה זה לא יתן לי את המידע שאני מבקש…

אני משתמש בgoogle calendar api.

זה אומר שאני צריך לשלוח בקשה כדי לקבל גישה לapi ועם המידע שחוזר לשלוח אותו לapi עצמו ורק אז הוא מחזיר לי אירועים וכאלה.

אילו דוגמאות אני יכול לשלוח ?

דוגמאות של הבקשות שאתה שולח, ה־JSON/בקשה שיוצאים וה־JSON שמתקבל (בניכוי פרטים אישיים).

ה־Mock לא צריך להיות Valid מול השירות האמיתי, זה הרעיון מאחורי ה־Mock.

אמורות להיות לך הרבה פונקציות שרק חלק קטן מאוד מהן אחראיות על התקשורת מול השרת.
לחלק הזה אתה עושה monkey patch ודואג שבמקום שהבקשה תצא לאינטרנט היא תפנה לפונקציה מסוימת ותקבל מידע שזייפת, ודומה מאוד לתשובת השרת לבקשה שלך.

על המידע הזה אתה עושה את הבדיקות בשאר הפונקציות, כדי לוודא שהן עובדות (אני מניח שלא 100% ממה שכתבת הוא תקשורת עם השרת של גוגל :slight_smile: )

אני משתמש בספריות של גוגל ככה שאני לא צריך להתעסק עם JSON הרבה כי זה פשוט מחזיר לי אובייקטים (אובייקטים של google כאלה שמגיעים מהספריות שלהם).
שאני מתעסק עם JSON זה בדרך כלל שאני מקבל את האירועים וזה לא בעיה…

אני יכול לשלוח תמונות של קטעים מהקוד ולהגיד לך איזה אובייקטים הם מחזירים (בדרך כלל אובייקטים של google)

זה משהו שיעזור?

רוב הקוד פונה לשרתים של גוגל, ככה שאני תמיד חייב response מהם.
אשמח להסבר או מדריך לאיך לעשות את זה נכון, אם אפשר?

ותודה רבה !! :slight_smile:

באיזה מודול אתה משתמש?
קראת את זה?

אלא המודלים

ולא קראתי את זה זה לא עלה בחיפוש שעשיתי, קורא עכשיו :slight_smile:
עדכון: זה עוזר אבל לא לגמרי, אני ממשיך לחפש דוגמא לgoogle calendar api ולא מוצא…

יש על זה ממש המון חומר בחיפוש זריז.
מקשר לאיך שאני חיפשתי.

2 לייקים

אוקיי אמשיך להסתכל.

תודה רבה על העזרה :smiley:

לייק 1

מתקשה למצוא דוגמא טובה לmock של google calendar api…
אני צריך ליצר את המצב שמחזיר לי את האירועים.
תודה.

צרף בבקשה את הקוד הרלוונטי, או קישור ל־PR שנמצא במצב WIP

כאן הקוד. הפונקציה שמביאה את האירועים ושומרת אותם לדטה בייס נקראת get_current_year_events

ועבור איזו פונקציה אתה לא מצליח לעשות טסטים?

בגדול הכל, כי כל הפונקציות פנוי באיזה שהיא דרך לapi.

יש לי פונקציה ששולחת את המשתמש למסך הסכמה כדי להשתמש במידע של החשבון שלו ומחזירה ושומרת את הtoken שקיבלתי.

יש לי פונקציה שמעדכנת את הtoken כאשר הוא פג תוקף

ויש פונקציה שמקבלת את האירועים מהapi

שלושת אלא דורשות קשר לapi…

באופן כללי, אני צריך בבקשה שתהיה יותר ספציפי כדי שאוכל לעזור לך :slight_smile:

תבחר את הפונקציה הבסיסית ביותר בקוד.
אשמח לשמוע מה הפער – מה חסר כדי שיהיה לה טסט ולמה להערכתך זה בעייתי

אין בעיה אהיה יותר ספציפי.

כל פונקציה שלי מובילה לפונקציה אחרת כי הן תלויות אחת בשניה, ככה גוגל בנו את הAPI שלהם וככה נעלצתי לעבוד עם זה, בגלל זה אני לא יכול לדלג שלב…

הפונקציות שלי מריצות בתוכם את הבקשות לAPI, ובגלל שאני משתמש בספריות של גוגל אני לא צריך לעשות requests האובייקיטים מטפלים בזה בעצמם.

אז אין לי כל כך את האופציה לעשות test בלי גישה לAPI…

ובגלל זה אין דוגמא לmock ל calendar api כי הוא תלוי בזה.

הפונקציה שאני צריך לעשות לה test זה הפונקציה שמחזירה אירועים מהAPI
מה שחסר זה דרך לעשות mock של הAPI שמחזיר אירועים.

זה מאוד קשה להסביר את זה כי זה API מורכב הוא דורש המון שלבים שעוברים דרך google לפני שאני אוכל בכלל לגשת לAPI.

הנה דוגמא לשלב שצריך לעשות לפני גישה לcalendar api: Authorizing Requests to the Google Calendar API  |  Google Developers

הבעיה היא יותר כללית בגלל זה קשה למקד אותה, מה אתה מציע לעשות?
תודה רבה :raised_hands:

אני מציע גישה שאולי מעט פשוטה יותר.
הקוד שלך בנוי מפונקציות. בהגדרה, ישנה פונקציה אחת לפחות שלא קוראת לפונקציות נוספות – נקרא לה “היחידה הבסיסית”.
אני מבקש ממך להצביע על אותה יחידה בסיסית בשם שלה (נניח authenticate_user_from_form, סתם זורק), להגיד לי באיזה קובץ ושורה בקישור שנתת היא מופיעה (נניח: בקובץ users.py בשורה 50), ולהסביר לי איפה התקשית לבנות עבורה טסט (נניח: אני לא בטוח איך לעשות Mock לפונקציה google.Authenticate כיוון שהיא אמורה לדבר עם השרתים של גוגל) :slight_smile:

היחידה הבסיסית היא: db_cleanup בשורה 134.

עבורה אין בעיה לכתוב טסט…
האחרות דורשות קשר לAPI הן הבעיה.