【问题标题】:How to test for thrown error with Chai.should [duplicate]如何使用 Chai.should 测试抛出的错误 [重复]
【发布时间】:2016-07-13 00:40:35
【问题描述】:

我正在使用Chai.should,我需要测试异常,但无论我尝试什么,我都无法让它工作。 docs 只解释expect :(

我有这个单例类,如果你尝试它会抛出错误

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

new MySingleton().should.throw(Error('Cannot construct singleton');

这些都不起作用。这是怎么做的?有什么建议吗?

【问题讨论】:

  • 这个问题不是重复的。它询问subject.should.throw 风格。另一个问题是expect 风格。

标签: javascript unit-testing ecmascript-6 chai


【解决方案1】:

我知道这是一个已回答的问题,但我仍然想投入两分钱。

样式指南中有一个部分对此进行了说明,即:http://chaijs.com/guide/styles/#should-extras。那么这在实践中是什么样子的:

should.Throw(() => new MySingleton(), Error);

这与公认的答案并没有什么不同,但我发现它更具可读性,并且更符合他们的指导方针。

【讨论】:

  • 我相信这是要走的路,所以我会将其标记为已接受以帮助人们。这更像柴风格,我喜欢它。尤其是在参数传递方面,这种方式更加简洁。
【解决方案2】:

这里的问题是你直接执行函数,有效地防止 chai 能够在它周围包裹一个 try{} catch(){} 块。

在调用到达should-Property 之前引发错误。

试试这样:

 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 为您处理函数调用。

【讨论】:

  • 只是想补充一下,如果有人想将参数传递给函数,你可以做myfunc.bind(foo, bar).should.throw(...)
猜你喜欢
  • 2013-02-04
  • 2017-12-26
  • 2020-06-22
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
相关资源
最近更新 更多