考虑下面的一段代码:
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
检查
答案 0 :(得分: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');
})
});
答案 1 :(得分:0)
首先,您应该抛出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之前会抛出错误并且有机会捕获它。