• בלוג
  • מתי כן להשתמש ב mock

מתי כן להשתמש ב mock

29/12/2021

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

1. בדיקת התמודדות עם שגיאות

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

קוד בדיקה ב Jest יכול להפעיל:

global.fetch = jest.fn(() =>
  Promise.resolve({
    ok: false,
    status: 500,
    statusText: 'Server busy',
  })
);

ואז קוד רגיל שירוץ ישתמש ב fetch המזויף ותמיד יקבל שגיאת HTTP 500 במקום את התוצאה הרגילה, ואנחנו נוכל לוודא שהקוד מציג הודעה מנומסת למשתמש.

2. התמודדות עם חוסר עקביות מובנה בבדיקה

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

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

jest
  .useFakeTimers()
  .setSystemTime(new Date('2021-01-01').getTime());