首页 > 解决方案 > 期望 Jest 中的超时被拒绝

问题描述

我有一个 mongodb 连接,我想在数据库关闭时测试 try catch。所以它尝试连接到数据库,当它失败时会抛出一个错误。但这不是开玩笑的。我想得到一个超时,所以错误是 trown,但开玩笑只是显示一个超时错误

it('should not be able to create a new class if database is down', async () => {
    await fakeMongodb.closeDatabase();
    await expect(
      createLesson.execute({
        name: 'Lesson Test',
        description: 'Description Test',
        video: 'testurlvideo.com',
        data_init: 20210321,
        data_end: 20211031,
      }),
    ).rejects.toBeInstanceOf(AppError);
    await fakeMongodb.connect();
  });

超时后如何拒绝?

标签: javascriptnode.jsmongodbjestjs

解决方案


您正在查看的问题很可能是由于 async test in 的jest超时时间和mongodb.connect

默认情况下,任何异步测试的超时时间都是 5000 毫秒。而对于大多数 mongodb 驱动程序,默认情况下最多为 30000 毫秒(请查看您正在使用的驱动程序的文档)

我将假设您正在进行单元测试,这意味着 fakeMongodb 可能是mock实际 mongodb 客户端的一个版本。因此,您可能应该分享您是如何进行模拟的,或者只是纯粹使用 automock。

如果您通过实际连接到数据库进行测试,您可以调整 jest 测试的超时以匹配您正在使用的驱动程序的超时。

--testTimeout= 30000// timeout of 30s 这将适用于所有测试用例。

要只为特定函数提供超时,那么您可以在声明测试用例时使用此语法。

test(name, fn, timeout)

例子

test('example', async () => {
  

}, 10000); // timeout of 10s (default is 5000)

推荐阅读