我正在用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)时会出现相同的结果。
任何提示?在此先感谢:)
答案 0 :(得分:1)
您期望的TypeError
实例不是被抛出的实例,尽管它们是同一类的实例。
在您链接的文档中,您会注意到当使用.threw()
对象参数调用error
方法(并返回成功)时,error
对象是获得的对象抛出,而不是同一个类的另一个实例。
要检查所使用的例外类别,看起来您应该提供{ name : "ExceptionClassName" }
(即您的案例中为{ name: "TypeError" }
)参数。