Javascript 柴:如何检查异常属性
考虑下面的一段代码:Javascript 柴:如何检查异常属性,javascript,node.js,chai,Javascript,Node.js,Chai,考虑下面的一段代码: 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")
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”方法,但它只提供了检查的实例。首先,您应该抛出错误的实例或扩展错误的实例
parse = function() {
throw new Error('PROTOCOL_ERROR');
}
然后,chai
有一个方法来断言函数正在抛出错误
所以最后一件事应该是这样的:
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之前抛出错误,并有机会捕获它。我找到了以下答案:
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');
})
});
您只能断言错误是使用特定构造函数引发的,并且消息是什么。你想检查什么财产?不管什么财产。例如,它可以是sMessage,那么你就无法避免上面使用chai的样板。只是一个警告,如果你用try{}catch{}
编写它,它不会抛出任何东西,它将被断言并传递,你现在明白问题了:)谢谢你的回答