טסטים ללא API KEY

ניסיתי זה לא הצליח לי, וניסיתי עוד פעם עכשיו ולא הצליח

מה ניסית? איפה זה כשל?
עם קוד בבקשה

לייק 1

שאתה יוצר build הוא שולח את הcredentials לגוגל גם עם pytest, ולי אין credentials שהם valid לספק לו.
ניסיתי לשלוח גם בלי credentials כי כקראתי שזה אפשרי, וזה גם כשל.

לא עובר את build בשורה 11.

אפשר בבקשה כטקסט כדי שאוכל להעתיק ולהדביק אצלי?

לייק 1
from datetime import datetime
from google.oauth2.credentials import Credentials

from googleapiclient.discovery import build
from googleapiclient.http import HttpMockSequence

def test_google_connect():
    http = HttpMockSequence([({'status': '200'}, "{}")])
    cred = Credentials()
    service = build('calendar', 'v3', credentials=cred)
    request = service.volumes().list(calendarId='primary',
                                     timeMin=datetime(2021,1,1).isoformat(),
                                     timeMax=datetime(2022, 1, 1).isoformat(),
                                     singleEvents=True,
                                     orderBy='startTime'
                                     ).execute()
לייק 1

אוקיי.
מה המטרה של ה־Mock שאנחנו מנסים לכתוב פה בעצם?
אם נצליח לכתוב Mock כזה, מה נשיג? מה זה יאפשר לנו?

זה יאפשר לנו לכתוב בדיקה ליחידה הבסיסית ממעלה 2 get_current_year_events

למה אנחנו לא יכולים בלי ה־Mock? למה ה־Mock יעזור לנו?

זה לא הרעיון? לבדוק את הקוד.

בגדול הmock לא עוזר לכלום כשחושבים על זה לעומק רק מדמה את החיבור לשרת…

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

לייק 1

אין צד יותר אחורה מזה.
יש קדימה db_cleanup.

התכוונתי צעד אחורה בחשיבה, לא בקוד.
אחזור על השאלה: הסכמנו שאנחנו לא מצליחים לבנות טסט על get_current_year_events, וזה לא טוב.
מה חסר לך כדי שכן תוכל לבנות עבורו טסט?

חסר גישה לapi, אבל אם אנחנו הבנו שאי אפשר לעשות mock לגוגל api, אז חסר רק לקחת את הפורמט json של מה שהapi מחזיר ולהכניס את הדוגמאות לדטה בייס.

לזה התכוונת?

אני אדייק אותך מעט: יש גישה ל־API.
אנחנו כותבים טסטים ואנחנו מעדיפים שלא יתבצע חיבור לאינטרנט.

מהרבה סיבות: בקשות API עלולות לעלות כסף ולא נרצה לבזבז אותן על טסטים, יכול להיות rate limit, בקשות רשת איטיות, יכול להיות שהאינטרנט שלנו לא עובד והבדיקות יפלו בגלל זה.

רגע, בלי לקפוץ למסקנות בבקשה

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

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

זה כבר נושא אחר שנצטרך להתייחס אליו בהמשך – עצם השימוש בו’ החיבור כאן:

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

בוא ננסה קודם לתפור את הטסטים לחלק הראשון – זה שמביא את האירועים מ־google calendar api.
מה חסר לך כדי שכן תוכל לבנות עבורו טסט?

כן כי מבחינת רצף זה נראה הגיוני, לא בעיה להפריד אותם.

אני צריך גישה לAPI או לmock.
לא תהיה לי גישה לAPI גם ככה שאני אעלה לגיט כי לא יהיה API KEY…
וmock אני לא מצליח ליצור…

אז הרעיון הבא זה לקחת את הפורמט json של אירועים של google calendar, ליצור כמה אובייקטים שמדמיים את האירועים שמגיעים מהAPI ולתת לזה לרוץ.

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

מעולה

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

באיזה שלב עצרת? מה עשית שלא עבד בניסיון ליצור Mock?

מה לדעתך ההבדל בין מה שתיארת לבין Mock?

בתוצאת הסופית אין הבדל.
פשוט mock מדמה איך הכל עובר ברשת.

אם זה בסדר לעשות דוגמאות של אירועים עם הפורמט של google calendar api, אז אני יכול לעשות את זה.