柴:我如何检查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包装函数调用。 否则,在期望被调用之前抛出错误,并有机会捕捉它。