【问题标题】:Chai: how can I check exception propertiesChai:如何检查异常属性
【发布时间】:2016-04-21 17:15:45
【问题描述】:

考虑下面的一段代码:

var expect = require('chai').expect;

parse = function() {
  throw {error: 'PROTOCOL_ERROR'}
}

describe('parser', function() {

  it('throw error on unfinished command', function() {
    try {
      parse("*2\r\n$4\r\necho\r\n$11\r\nhel")
    } catch (e) {
      expect(e).to.equal({error: 'PROTOCOL_ERROR'})
    }
  })
});

有没有办法避免代码中出现这个try...catch 样板? Chai 有 'throw' 方法,但它只提供instanceof 检查

【问题讨论】:

    标签: javascript node.js chai


    【解决方案1】:

    我找到了这个答案:

    var expect = require('chai').expect;
    
    parse = function() {
      throw {error: 'PROTOCOL_ERROR'}
    }
    
    describe('parser', function() {
      it('throw error on unfinished command', function() {
          expect(
            () => parse("*2\r\n$4\r\necho\r\n$11\r\nhel")
          ).to.throw().which.has.property('error', 'PROTOCOL_ERROR');
      })
    });
    

    【讨论】:

      【解决方案2】:

      首先,你应该抛出一个 Error 的实例或扩展 Error 的东西

      parse = function() {
        throw new Error('PROTOCOL_ERROR');
      }
      

      然后chai 有一个方法来断言一个函数正在抛出一个错误 http://chaijs.com/api/bdd/#method_throw

      所以最后的结果应该是这样的:

      var expect = require('chai').expect;
      
      parse = function() {
        throw new Error('PROTOCOL_ERROR');
      }
      
      describe('parser', function() {
      
        it('throw error on unfinished command', function() {
      
          expect(function() { parse("*2\r\n$4\r\necho\r\n$11\r\nhel") }).to.throw(Error, 'PROTOCOL_ERROR');
      
        })
      });
      

      编辑:在函数中包装函数调用。否则会在调用 expect 之前抛出错误并有机会捕获它。

      【讨论】:

      • 您只能断言错误是使用特定的构造函数引发的以及消息是什么。您要检查什么属性?
      • 不管什么属性。查找例如:stackoverflow.com/a/24078053/1907902 可以是 sMessage,例如。
      • 那么你无法避免使用 chai 上面的样板。只是一个警告,如果你用 try{}catch{} 写它并且它没有抛出任何东西,那么它会被断言并且它会通过
      • 是的,你现在明白问题所在了:)
      • 感谢您的回答
      猜你喜欢
      • 2022-12-28
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      相关资源
      最近更新 更多