TypeScript - בדיקות Async של Jest לא נכשלות, אבל שגיאת האסרטציה מוצגת ביציאת הבדיקה


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

הנה דוגמת מבחן:

  it('Should return repos for a known account', (done) => {
    expect.assertions(1);
    expect(apiProvider.ReposForUser('joon').then((data) => data.length)).resolves.toBeGreaterThan(0).then(done());
  });

אני פשוט פותר את ההבטחה עם מערך ריק לעת עתה במחלקת הספק (כלומר, אני מצפה שהבדיקה תיכשל):

export class GithubAPIProvider implements IGithubDataProvider {
  public ReposForUser(githubUser: string): Promise<GithubRepoData[]> {
    return new Promise<GithubRepoData[]>((resolve, reject) => {
      resolve([]);    
    });
  }  
}

כשאני מריץ את סקריפט ה-jest שלי, אני רואה שגיאת הבטחה שנכשלת בטקסט הפלט, אבל הבדיקה מוצגת כהצלחה:

השתמשתי בקריאת חזרה (callback) מסוג done בבדיקה שלי, למה jest לא ממתין לקריאת החזרה?

תשובה #1

גיליתי מה הבעיה. הייתי קורא לפונקציית done בתוך המתודה then שלי במקום להעביר הפניה לפונקציית done.

הקוד עכשיו נראה כך: ["done" במקום "done()"]:

it('Should return repos for a known account', (done) => {
    expect.assertions(1);
    expect(apiProvider.ReposForUser('joon').then((data) => data.length)).resolves.toBeGreaterThan(0).then(done);
  });