typescript 如何让Jest测试“权限被拒绝”

von4xj4u  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(158)

我有下面的试验在开玩笑:

describe('On any platform', (): void => {
      it('throws an error when trying to start with an invalid socket Path.', async(): Promise<void> => {
        const factory = new BaseHttpServerFactory(handler, httpOptions);
        expect((): void => {
          factory.startServer('/fake/path');
        }).toThrow()
      });
    });

该命令尝试使用套接字文件的无效路径启动节点http服务器。正如预期的那样,这将导致出现“EACCESS:权限被拒绝'/fake/path'“错误。但是,Jest无法捕获此错误,因此测试失败,并显示消息“The received function did not throw”。
Jest如何测试这些类型的预期错误?
我已经检查了链接到expect方法上的任何更适用的方法,但据我所知,toThrow()是唯一能够测试错误的方法。

tjjdgumg

tjjdgumg1#

问题是Node.js server.listen()函数同步返回一个服务器示例,但异步启动监听过程。因此,上面的函数调用实际上并没有抛出。解决方案是让测试本身在服务器上设置一个错误回调,这样它就可以像这样检查引发的错误

describe('On any platform', (): void => {
      it('throws an error when trying to start with an invalid socket Path.', async(): Promise<void> => {
        const factory = new BaseHttpServerFactory(handler, httpOptions);
        factory.startServer('/fake/path')
          .on('error', (error): void => {
            expect(error).toHaveProperty('code', 'EACCES');
          });
      });
    });

相关问题