最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何用jest断言sequelizejs单元测试中的验证错误?

IT培训 admin 4浏览 0评论

如何用jest断言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不正确,测试用例仍然失败。试图以未定义而无济于事。这种错误的正确断言是什么?

回答如下:

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

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

请注意,toThrow是针对PR 4884的承诺修复的,所以如果你使用旧版本的Jest(22.0.0之前),你需要使用像toEqual这样的东西:

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

如何用jest断言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不正确,测试用例仍然失败。试图以未定义而无济于事。这种错误的正确断言是什么?

回答如下:

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

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

请注意,toThrow是针对PR 4884的承诺修复的,所以如果你使用旧版本的Jest(22.0.0之前),你需要使用像toEqual这样的东西:

await expect(User.create(payload())).rejects.toEqual(expect.any(Error));  // SUCCESS
发布评论

评论列表 (0)

  1. 暂无评论