比较 Chai 中的错误

Compare errors in Chai

我需要在 ES6(节点 v4)中实现我自己的错误 class:

class QueryObjectError {
    constructor (message) {
        this.message = message;
    }
}

我有一部分代码抛出所述错误类型:

function myFunct () {
    throw new QueryObjectError('a message');
}

我正在使用 Mocha 和 Chai 来测试该函数会抛出预期的错误和预期的消息:

it('is a test', function (done) {
    var err = new QueryObjectError('abc');
    assert.throw(myFunct, err);
    done();
});

虽然 QueryObjectError 对象有不同的消息,但测试通过了,我想测试检查深度相等性的情况。有什么方法可以用给定的工具解决这个问题?

您的代码有两个突出问题:

  1. 您没有正确使用assert.throw。您应该将构造函数作为第二个参数传递给预期的异常,并将正则表达式或字符串作为第三个参数传递。如果第三个参数是一个字符串,Chai 将检查该字符串是否存在于异常消息中。如果是正则表达式,会检测消息是否被正则表达式匹配。

  2. 你的异常应该有一个 toString 方法来 returns 消息,否则 Chai 将不知道如何检查消息。

这是一个显示失败和成功的示例:

import { assert } from "chai";

class QueryObjectError {
    constructor (message) {
        this.message = message;
    }

    toString() {
        return this.message;
    }
}

function myFunct () {
    throw new QueryObjectError('a message');
}

it('is a test', function () {
    assert.throw(myFunct, QueryObjectError, 'abc');
});

it('is another test', function () {
    assert.throw(myFunct, QueryObjectError, /^a message$/);
});