簡體   English   中英

Jest 中如何執行異步測試

[英]How are async tests executed in Jest

我正在嘗試使用 Jest 進行測試。 我想了解 JEST 在以下情況下的行為:

  1. 當異步 function 通過測試時
  2. 當包含異步代碼的同步 function 傳遞給測試時。

請檢查下面的 sippet 以供參考。

我想知道測試是否在這兩種情況下都異步執行。

it('should do async stuff...', async () => {
    const result = await doSomething();
    expect(result).toBe('value');
})

it('should do async stuff...', () => {
    async () => {
        const result = await doSomething();
        expect(result).toBe('value');

    }();
})

提前致謝

由於第二個測試的 function 沒有聲明為async ,它將同步運行。 自調用 function 將被執行,但 Jest 將在任何事情發生之前關閉執行 scope。

您可以使用以下擴展代碼段的代碼自己清楚地看到它:

async function doSomething(ms) {
  return new Promise((resolve) =>
    setTimeout(() => {
      resolve("value");
    }, ms)
  );
}

describe("compare async tests", () => {
  it("test 1", async () => {
    const result = await doSomething(2000);
    console.log("test 1", { result });
    expect(result).toBe("value");
  });

  it("test 2", () => {
    (async () => {
      const result = await doSomething(1000);
      console.log("test 2", { result });
      expect(result).toBe("value");
    })();
  });
});

運行上述代碼會將兩個測試都標記為成功,但您只會在控制台 output 中看到“測試 1”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM