grunt-mocha-test抛出我期望在我的try / catch块中捕获的错误

时间:2013-12-06 22:57:54

标签: node.js coffeescript try-catch gruntjs mocha

我正在使用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的错误/设计限制还是我做错了什么?

[编辑:抛出的错误是我的休息客户端中定义的自定义错误]

1 个答案:

答案 0 :(得分:0)

我打算提出一个可能性。 client.mightThrowAnError正在异步做某事。 (看起来显而易见。)如果是引发错误的client.mightThrowAnError异步部分,这将发生 try...catch块之外的不会被抓住。