javascript - Mocha/Chai 无法从函数中捕获错误对象
问题描述
我在测试 javascript 方面相当新,并尝试进行测试,我可以在其中捕获函数抛出的错误并在测试中捕获它。然而,经过多次尝试,我最终在这里询问我应该如何在期望中捕获错误对象。我指的是这个Q/A。
这是我的代码:
export const createCourse = async (courseData: ICourse, userId: string) => {
logInfo('Verifying if user is a volunteer');
const volunteer: Volunteer | null = await getVolunteer(userId);
if (volunteer == null) {
logError('User must be a volunteer');
throw new Error('User must be a volunteer');
}
// do some stuff
};
这是我在测试文件中写的内容:
describe.only('Try creating courses', function () {
before(async function () {
user_notVolunteer = await addUser(UserNotVolunteer);
});
after(async function () {
await deleteUser(UserNotVolunteer.email);
});
it('Creating a course when user is not volunteer', async function () {
course = await createCourse(test_course, user_notVolunteer.id);
expect(course).to.throws(Error,'User must be a volunteer');
});
});
在这里,我试图匹配错误的类型以及错误的字符串,但没有通过它。
我还尝试了更多这样的代码,
expect(function () {
course;
}).to.throw(Error, 'User must be a volunteer');
解决方案
问题是,您正在尝试测试异步函数是否引发错误。异步函数只是普通函数,它们在内部转换为 Promise。Promise 不会抛出,但会拒绝。您必须使用异步父函数.catch()
或catch() {}
在异步父函数中处理它们的错误。
在 Chai 中处理这个问题的一种方法是使用chai-as-promised库,它是 Chai 的一个插件,可以处理基于 Promise 的检查。
这是您应该执行的操作的示例:
const course = createCourse(test_course, user_notVolunteer.id);
await expect(course).to.eventually.be.rejectedWith("User must be a volunteer");
推荐阅读
- node.js - NodeJS:第一个斜杠的路由参数有效,但第二个斜杠的路由参数无效
- r - 使用 dplyr 在组内进行总结
- mysql - 如何在 NestJS 和 Knex 中构建复杂的 MySQL 查询
- java - Android studio解析json对象
- graphql - GraphQL 拼接 VS 合并模式
- python - 在保留其他值的同时使用列表聚合/删除行中的字符串(python)?
- facebook-opengraph - 网页预览仅限于某些平台
- java - 如何使用自己的快速排序来决定具有多个输入数据的任务
- python - 如何在不和谐的文本频道上发送嵌入的 Facebook 视频 URL
- react-native - React Native 的 NetInfo 在 iOS 和 Android 上的不同行为