柴:我如何检查exception属性

考虑下面的一段代码:

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在代码中try...catch样板? 柴有'扔'的方法,但它只提供了一个检查的instanceof

我find了这个答案:

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

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