如何在javascript中捕获断言错误?

如何在javascript中捕获断言错误?,javascript,jasmine,try-catch,Javascript,Jasmine,Try Catch,使用带有expect的try/catch块时,如果expect失败,则不会捕获错误。有没有办法捕捉javascript中的断言错误?代码示例: 试试看{ 期望(2)、期望(3); }捕获(错误){ console.log(错误); } 您可以创建一个 例如 const customMatchers={ toBeWithThrow(matchersUtil){ 返回{ 比较:功能(实际、预期){ const result={}; result.pass=matchersUtil.equals(实际

使用带有expect的
try/catch
块时,如果expect失败,则不会捕获错误。有没有办法捕捉javascript中的断言错误?代码示例:

试试看{
期望(2)、期望(3);
}捕获(错误){
console.log(错误);
}
您可以创建一个

例如

const customMatchers={
toBeWithThrow(matchersUtil){
返回{
比较:功能(实际、预期){
const result={};
result.pass=matchersUtil.equals(实际、预期);
如果(结果通过){
result.message='Expected'+actual+'to'+Expected;
}否则{
抛出新错误('预期'+actual+'为'+Expected');
}
返回结果;
},
};
},
};
描述('54601177',()=>{
beforeach(函数(){
jasmine.addMatchers(客户匹配器);
});
它('应该通过',()=>{
期望(2)。投掷(2);
});
它('也应该通过',()=>{
试一试{
期望(2)投掷(3);
}捕获(错误){
console.log(错误);
}
});
});
测试结果:

正在执行2个已定义的规范。。。
以随机顺序运行。。。(种子:09363)
测试套件和规格:
1.54601177
⠋    应传递到错误:预期2为3
比较时(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/src/stackoverflow/54601177/index.test.js:10:17)
在Expector.compare(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:3969:27)
at Expectation.tobewithththrow(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:3659:34)
在UserContext。(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/src/stackoverflow/54601177/index.test.js:27:17)
在QueueRunner.trunt(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7063:44)
在QueueRunner.run(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7104:25)
在runNext(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7023:18)
接下来(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7030:11)
在QueueRunner.onComplete(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:6924:9)
立即。_onImmediate(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7120:12)
✔ 也应该通过(14毫秒)
✔ 应通过(1ms)
>>完成了!
总结:
你可以做出一个决定

例如

const customMatchers={
toBeWithThrow(matchersUtil){
返回{
比较:功能(实际、预期){
const result={};
result.pass=matchersUtil.equals(实际、预期);
如果(结果通过){
result.message='Expected'+actual+'to'+Expected;
}否则{
抛出新错误('预期'+actual+'为'+Expected');
}
返回结果;
},
};
},
};
描述('54601177',()=>{
beforeach(函数(){
jasmine.addMatchers(客户匹配器);
});
它('应该通过',()=>{
期望(2)。投掷(2);
});
它('也应该通过',()=>{
试一试{
期望(2)投掷(3);
}捕获(错误){
console.log(错误);
}
});
});
测试结果:

正在执行2个已定义的规范。。。
以随机顺序运行。。。(种子:09363)
测试套件和规格:
1.54601177
⠋    应传递到错误:预期2为3
比较时(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/src/stackoverflow/54601177/index.test.js:10:17)
在Expector.compare(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:3969:27)
at Expectation.tobewithththrow(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:3659:34)
在UserContext。(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/src/stackoverflow/54601177/index.test.js:27:17)
在QueueRunner.trunt(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7063:44)
在QueueRunner.run(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7104:25)
在runNext(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7023:18)
接下来(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7030:11)
在QueueRunner.onComplete(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:6924:9)
立即。_onImmediate(/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/node_modules/jasmine core/lib/jasmine core/jasmine.js:7120:12)
✔ 也应该通过(14毫秒)
✔ 应通过(1ms)
>>完成了!
总结:

错误将被捕获。怎么了?这个错误没有被捕获,因为它不是JavaScript错误,而是“设计错误”。我的问题是:为什么要“捕获”失败的测试?将
try/catch
想象成告诉测试运行者:“我知道有问题,但不要担心,我能处理它。继续,就像什么都没发生一样”。其思想是,每当expect失败时,会显示一些消息(例如,Expected 2为3),相同的消息被记录到日志文件中。我想知道我可以使用try/catch吗,或者还有其他方法。IIRC有一种方法可以为失败的断言指定自定义消息。检查文档。否则,在这种情况下,try/catch是一种可行的方法来做你想做的事情