我如何处理 Jest 中的承诺?
How can I handle a promise in 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
您预计它会失败并被拒绝,在本例中它会成功。如果将其更改为 resolves
而不是 rejects
,它将起作用。
或者您必须确保您正在执行的查询实际上会失败,即更新不存在的内容。
另一种方法是实际执行查询,从中获取结果,然后对 return 数据执行 expect
断言。
为了更清楚起见,正常的承诺如下所示:
const example = () => new Promise((resolve, reject) => ...
然后你可以调用那些 resolve 和 reject 方法,这取决于 promise 是否正确解析,或者如果失败你可以调用 reject。当你开玩笑地使用 .resolves
或 .rejects
时,它正在测试承诺中的那些 resolve 和 reject 方法。
当您使用 async
函数时,您实际上看不到它,但它在做同样的事情。
更重要的是,当用户上传的文件多于他们实际可以上传的文件时,它就会崩溃,这就是为什么在你的情况下它实际上并没有失败,因为那样它确实会被拒绝。
我在这部分代码中遇到错误。 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
您预计它会失败并被拒绝,在本例中它会成功。如果将其更改为 resolves
而不是 rejects
,它将起作用。
或者您必须确保您正在执行的查询实际上会失败,即更新不存在的内容。
另一种方法是实际执行查询,从中获取结果,然后对 return 数据执行 expect
断言。
为了更清楚起见,正常的承诺如下所示:
const example = () => new Promise((resolve, reject) => ...
然后你可以调用那些 resolve 和 reject 方法,这取决于 promise 是否正确解析,或者如果失败你可以调用 reject。当你开玩笑地使用 .resolves
或 .rejects
时,它正在测试承诺中的那些 resolve 和 reject 方法。
当您使用 async
函数时,您实际上看不到它,但它在做同样的事情。
更重要的是,当用户上传的文件多于他们实际可以上传的文件时,它就会崩溃,这就是为什么在你的情况下它实际上并没有失败,因为那样它确实会被拒绝。