在传递错误参数时,Sinon的spy.threw()行为不正常吗?

时间:2017-01-31 10:43:06

标签: javascript node.js sinon

我正在用sinon.JS编写简单的单元测试。正在测试的代码有一些类型检查,它会抛出一个TypeError:

Tx = class Tx {
    constructor(date) {
        if (!(date instanceof Date)) throw new TypeError();
        this.date = date;
    }
 }

在我的test.js中,我正在使用sinon来测试当参数不是Date时Tx实例化失败:

describe('Tx', function() {
    describe('#constructor', function() {
        it('should fail when not passed a date as 1st param', function() {
            var txSpy = sinon.spy(Tx.constructor);
            try {
                tx = new Tx(true);
            } catch (e) {
                // test success
                console.log('Error: '+e)
            }
        }
    }
}
result = txSpy.threw(new TypeError());
assert(result);

断言失败,即使catch输出为“Error:TypeError”;传递错误类型的String描述(即“TypeError”,根据the sinon API)时会出现相同的结果。

任何提示?在此先感谢:)

1 个答案:

答案 0 :(得分:1)

您期望的TypeError实例不是被抛出的实例,尽管它们是同一类的实例。

在您链接的文档中,您会注意到当使用.threw()对象参数调用error方法(并返回成功)时,error对象是获得的对象抛出,而不是同一个类的另一个实例。

要检查所使用的例外类别,看起来您应该提供{ name : "ExceptionClassName" }(即您的案例中为{ name: "TypeError" })参数。