我正在使用grunt-mocha-test(用coffeescript编写的测试)进行rest api验证。我用来调用api的客户端会抛出一个自定义错误,如果响应不是200.在某些情况下,这样的响应只是意味着数据库没有准备好我正在验证的数据,所以我想轮询服务,直到它准备好或我超时。由于每次没有准备就会抛出错误(即不是200),我想将我的调用包装在try / catch块中 - 在catch块中重试。不幸的是,摩卡抛出我的错误而不是让我的catch块捕获它。
以下是我的代码示例:
Client = require 'rest-client'
client = new Client
describe "Try catch test", ->
it 'should catch my error', (done) ->
retry = (done) ->
try
client.mightThrowAnError, (response) ->
done()
catch error
retry done
retry done
当然,实际上我在catch块中有代码,最终在重试之后出错,所以我不会永远地递归调用retry,但为了简单起见我省略了这一点,因为mocha会抛出错误而不是永远允许我的catch块来处理它:
Uncaught Error: <my custom Error>
这是Mocha的错误/设计限制还是我做错了什么?
[编辑:抛出的错误是我的休息客户端中定义的自定义错误]
答案 0 :(得分:0)
我打算提出一个可能性。 client.mightThrowAnError
正在异步做某事。 (看起来显而易见。)如果是引发错误的client.mightThrowAnError
的异步部分,这将发生 try...catch
块之外的不会被抓住。