Javascript 如何使用Chai.should测试抛出的错误
我正在使用,我需要测试一个异常,但无论我尝试什么,我都无法让它工作。唯一的解释是( 我有一个Singleton类,如果您尝试,它会抛出一个错误Javascript 如何使用Chai.should测试抛出的错误,javascript,unit-testing,ecmascript-6,chai,Javascript,Unit Testing,Ecmascript 6,Chai,我正在使用,我需要测试一个异常,但无论我尝试什么,我都无法让它工作。唯一的解释是( 我有一个Singleton类,如果您尝试,它会抛出一个错误 new MySingleton(); 下面是抛出错误的构造函数 constructor(enforcer) { if(enforcer !== singletonEnforcer) throw 'Cannot construct singleton'; ... 现在我想检查一下这种情况是否发生 it('should not be p
new MySingleton();
下面是抛出错误的构造函数
constructor(enforcer) {
if(enforcer !== singletonEnforcer) throw 'Cannot construct singleton';
...
现在我想检查一下这种情况是否发生
it('should not be possible to create a new instance', () => {
(function () {
new MySingleton();
})().should.throw(Error, /Cannot construct singleton/);
});
或
这些都不起作用。这是怎么做到的?有什么建议吗?这里的问题是,您直接执行函数,有效地阻止了chai在函数周围包装一个
try{}catch(){}
块
该错误在调用到达should
-属性之前抛出
试着这样做:
it('should not be possible to create a new instance', () => {
(function () {
new MySingleton();
}).should.throw(Error, /Cannot construct singleton/);
});
或者这个:
MySingleton.should.throw(Error('Cannot construct singleton');
这让Chai可以为您处理函数调用。我知道这是一个已回答的问题,但我仍然想投入我的两分钱 《样式指南》中有一节介绍了这一点,即:。那么这在实践中是什么样子的呢
should.Throw(() => new MySingleton(), Error);
这与公认的答案并没有什么不同,但我觉得它更具可读性,更符合他们的指导原则。这个问题不是重复的。它询问的是
主题。应该。抛出样式。另一个问题是期望样式。如果有人想传递参数,只想添加一个对于函数,您可以执行myfunc.bind(foo,bar).should.throw(…)
。我相信这是一种方法,因此我会将其标记为已接受,以帮助人们。这更像柴风格,我喜欢它。特别是在参数传递方面,这种方法更干净。
should.Throw(() => new MySingleton(), Error);