【问题标题】:Mocha/Chai unable to catch error object from a functionMocha/Chai 无法从函数中捕获错误对象
【发布时间】:2021-07-30 19:49:35
【问题描述】:

我在测试 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');

【问题讨论】:

    标签: javascript node.js unit-testing mocha.js chai


    【解决方案1】:

    问题在于,您正在尝试测试异步函数是否引发错误。异步函数只是普通函数,它们在内部转换为 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");
    

    【讨论】:

    • 谢谢,伙计 :)。我没有考虑过它,因为我已经在课程中等待部分来解决它,然后再将它传递给期望。但是,expect(course).to.eventually.be.rejectedWith("用户必须是志愿者");没有等待也可以正常工作。
    • @farrukh-faizy 我不建议您省略await,因为所有异步函数必须等待(处理)它们才能在错误处理程序。不过,我很高兴能帮上忙 :)
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 2014-03-02
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多