【问题标题】:How to assert the validate error in sequelizejs unit test with jest?如何用玩笑断言 sequelizejs 单元测试中的验证错误?
【发布时间】:2019-07-10 20:34:21
【问题描述】:

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

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.js sequelize.js jestjs


    【解决方案1】:

    假设User.create 返回一个Promise,该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
    

    【讨论】:

      【解决方案2】:

      你需要这样做。

      await expect( User.create(payload())).to.be.rejectedWith(Error)
      

      现在,如果 user.create 抛出错误,测试将通过,如果没有抛出错误,则测试失败。

      【讨论】:

      • 你能告诉我,这段代码中的用户是什么,我的意思是它是你的自定义类还是模型?它是回报的承诺吗?并且还向我展示了期望对象的创建,以便我可以更准确地回答它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 2018-09-10
      • 1970-01-01
      相关资源
      最近更新 更多