mocha测试中的setTimeout不起作用

时间:2014-04-17 22:07:31

标签: node.js asynchronous coffeescript mocha

我使用的功能类似于以下内容。我正在使用异步系列来测试异步函数。该系列中的第一个回调工作非常正常,它在第二个方法callThisGuy(客户端,回调)中断了

testFunction: () ->
  client = @
  ASync.series([
    (callback) ->
       client.createSingleClient(callback)
    (callback) ->
       client.callThisMethod(client, callback)
    (callback) ->
      trace "In the next step"
  ],
 (err, results) ->
     trace "Test"
 )

这是callThisMethod函数

callThisMethod:(client, callback) ->
    if(client.status == "new")
        callback(null," ")
    else
        setTimeout ( ->
            client.callThisMethod(client, callback)
        ), 1000

即使状态不是" new",也永远不会调用setTimeout函数。相反,它会跳到下一步。我没有Mocha运行相同的代码,然后超时工作正常。

在摩卡里面,它不起作用。我还检查了setTimeout是否未定义。它被定义了。我想知道我是否遗漏了什么。

2 个答案:

答案 0 :(得分:4)

如果我只能阅读coffeescript,我可以提供更多帮助。太难看了。 :(

https://mochajs.org/#asynchronous-code

您需要指定一个"完成"测试函数的回调方法。 Mocha使用您已声明回调参数的事实来了解测试是否是异步的。

答案 1 :(得分:1)

以下是如何使setTimeout在CoffeScript Mocha测试中工作:

describe 'This code', ->
  it 'should wait for myAsyncFunc', (done) ->
    this.timeout 4000
    myAsyncFunc = () ->
      console.log 'Tests here..'
      done()
    setTimeout myAsyncFunc, 3000
  • 如果未指定回调函数'should wait for myAsyncFunc',则测试done将不会等待异步调用。
  • 请注意this.timeout 4000可避免以下错误:Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
  • 有关Mocha(JavaScript)中asynchrounous代码的更多信息,请访问:Wikipedia on Managed Code