如何用玩笑测试 void 异步函数是否成功?

ada*_*lev 15 void promise typescript jestjs

你如何简洁地测试一个 void 异步函数是否用 jest 成功执行?我正在使用打字稿。

// foo.ts
export class Foo {
  public async bar(): Promise<void> {
    await someAsync();
  }
}
Run Code Online (Sandbox Code Playgroud)

如何测试new Foo().bar()不抛出错误?

Mr *_*zes 38

这是我发现的最语义化的方式。它甚至只是测试名称的翻译。

describe("Foo.bar()", () => {
      test("Should not throw", async () => {
        await expect(new Foo().bar()).resolves.not.toThrow();
      });
    });
Run Code Online (Sandbox Code Playgroud)

  • 对于那些像我一样错过了它的人来说,“等待”非常重要。如果省略它,那么测试将始终通过。虽然我没有其他选择,但我更喜欢一个在语法上不可能出现此类错误的选项。 (4认同)

Ale*_*lex 8

Promise 的优点是它根本不应该抛出,而是被解决或拒绝。另一方面,toBe()断言需要一个参数,即使Promise<void>TypeScript 中有一个参数。

那么如果没有传递参数(或者参数是空的)但它仍然被评估怎么办。论据是undefined

  test("Should resolve", async () => {
      await expect(new Foo().bar()).resolves.toBe(undefined);
  });
Run Code Online (Sandbox Code Playgroud)

测试对not.toThrow()我来说碰巧是假朋友,因为我的Foo.bar()没有抛出,也没有解决。

  • 您可以使用 .toBeUndefined() 匹配器来测试未定义 (3认同)