首页 > 解决方案 > 如何用玩笑断言 sequelizejs 单元测试中的验证错误?

问题描述

我正在对用户模型进行单元测试。用户名不应为空。单元测试如下:

it('should reject no name', async () => {
   name = '';
   expect(await User.create(payload())).toThrow();
});

payload除了空名称之外的所有数据时,单元测试会抛出以下错误:

 SequelizeValidationError: Validation error: Invalid validator function: unique,
    Validation error: Invalid validator function: msg,
    Validation error: column "cell" does not exist

但是这里的断言.toThrow是不正确的,测试用例仍然失败。试图BeUndefined 无济于事。这种错误的正确断言是什么?

标签: node.jssequelize.jsjestjs

解决方案


假设User.create返回一个Promise拒绝并抛出错误:

await expect(User.create(payload())).rejects.toThrow();  // SUCCESS

请注意,对于PR 4884toThrow的 Promise已修复,因此如果您使用的是旧版本(22.0.0 之前),您将需要使用以下内容:JesttoEqual

await expect(User.create(payload())).rejects.toEqual(expect.any(Error));  // SUCCESS

推荐阅读