首页 > 解决方案 > Jest 中如何执行异步测试

问题描述

我正在尝试使用 Jest 进行测试。我想了解 JEST 在以下情况下的行为:

  1. 当异步函数传递给测试时
  2. 当包含异步代码的同步函数传递给测试时。

请检查下面的 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');

    }();
})

提前致谢

标签: javascriptnode.jstypescriptjestjs

解决方案


由于第二个测试的函数没有声明为async,它将同步运行。自调用函数将被执行,但 Jest 将在任何事情发生之前关闭执行范围。

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

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");
    })();
  });
});

运行上述代码会将两个测试都标记为成功,但您只会在控制台输出中看到“test 1”。


推荐阅读