柴:如何检查异常属性

Chai: how can I check exception properties

本文关键字:检查 异常 属性 何检查      更新时间:2023-09-26

考虑下面的一段代码:

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样板?柴有"抛出"方法,但它只提供instanceof检查

我找到了这个答案:

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

首先,你应该抛出一个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');
  })
});

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