Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Chai.should测试抛出的错误_Javascript_Unit Testing_Ecmascript 6_Chai - Fatal编程技术网

Javascript 如何使用Chai.should测试抛出的错误

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

我正在使用,我需要测试一个异常,但无论我尝试什么,我都无法让它工作。唯一的解释是(

我有一个Singleton类,如果您尝试,它会抛出一个错误

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);