12

我目前正在使用chai. 我想测试我的一种方法引发的错误。为此,我编写了这个测试:

expect ( place.updateAddress ( [] ) ).to.throw ( TypeError );

这是方法:

Place.prototype.updateAddress = function ( address ) {
    var self = this;

    if ( ! utils.type.isObject ( address ) ) {
        throw new TypeError (
            'Expect the parameter to be a JSON Object, ' +
            $.type ( address ) + ' provided.'
        );
    }

    for ( var key in address ) if ( address.hasOwnProperty ( key ) ) {
        self.attributes.address[key] = address[key];
    }

    return self;
};

问题是chai测试失败,因为它的方法抛出了TypeError...。这不应该失败,因为这是预期的行为。这是声明:

在此处输入图像描述

我通过以下测试绕过了这个问题:

    try {
        place.updateAddress ( [] );
    } catch ( err ) {
        expect ( err ).to.be.an.instanceof ( TypeError );
    }

但我更喜欢try... catch在我的测试中避免使用语句,因为chai它提供了像throw.

有什么想法/建议吗?

4

1 回答 1

11

您需要将一个函数传递给 chai,但您的代码正在传递调用该​​函数的结果。

此代码应该可以解决您的问题:

expect (function() { place.updateAddress ( [] ); }).to.throw ( TypeError );
于 2013-11-26T14:37:34.253 回答