javascript - 我如何处理 Jest 中的承诺?
问题描述
我在这部分代码中遇到了错误。Received promise resolved instead of rejected
我不知道如何处理这个,有人可以帮助我吗?
it("should not create a media if the user doesn't exist", async () => {
user.user= undefined;
await usersRepository.save(user);
await expect(
createMedia.execute({
userId: user.id,
type: 'video',
media: 'video-media',
description: 'description',
}),
).rejects.toBeInstanceOf(AppError);
});
和:
expect(received).rejects.toThrow()
Received promise resolved instead of rejected
Resolved to value: {"description": "description", "id": "id number", "media": "video-media", "userId": "id user", "type": "video"}
解决方案
您的代码正在创建一个成功的承诺,然后您针对拒绝进行测试,因此它失败了,因为它成功执行并且您告诉它您希望它失败。
当您使用时,.rejects
您是在告诉expect
您希望它失败并被拒绝,在这种情况下它是成功的。如果将其更改为 aresolves
而不是 a rejects
,它将起作用。
或者您必须通过更新不存在的内容来确保您正在执行的查询实际上会失败。
另一种方法是实际执行您的查询,从中获取结果,然后expect
对返回数据进行断言。
为了更清楚,一个正常的承诺看起来像这样:
const example = () => new Promise((resolve, reject) => ...
然后你可以调用这些resolve 和reject 方法,这取决于promise 是否正确解析或者如果它失败了你可以调用reject。当您使用.resolves
或.rejects
开玩笑时,它正在测试 promise 上的那些 resolve 和 reject 方法。
当您使用一个async
函数时,您实际上并没有看到它,但它正在做同样的事情。
更重要的是,当用户上传的文件超出实际容量时,它会中断,这就是为什么在您的情况下它实际上并没有失败,因为它实际上确实被拒绝了。
推荐阅读
- ios - 如何将元数据添加到 iCloud Drive 中的文件并离线阅读?
- typescript - 为什么导入的 TypeScript 枚举未定义但分配给变量时工作
- rest - 如何通过邮递员使用 agent.googleapis.com/agent/ 列出特定资源(例如 vm、cpu、内存)指标
- c++ - 如何在 c++ 和 dev c++ 中删除二叉搜索树中的节点
- keras - 自定义损失函数问题:Graph 执行中不允许使用 `tf.Tensor` 作为 Python `bool`
- wordpress - ACF 克隆字段 - 设置默认值
- node.js - 在 node.js 中使用 node-fetch 重用 TCP 连接
- r - 是否可以根据下一张图片时间是否在前一张图片的 2 分钟内对 csv 中的图像创建日期进行排序/分组?
- c - 递归链表?我认为
- python - 无法在 Windows 上使用 python kivy 创建 .exe(Pyinstaller)