比较Chai

时间:2015-10-26 17:42:39

标签: javascript mocha assert chai

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

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 个答案:

答案 0 :(得分:1)

您的代码存在两个突出问题:

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

  2. 您的异常应该有toString方法返回消息,否则Chai将不知道如何查看消息。

  3. 以下是一个显示失败和成功的示例:

    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$/);
    });