【问题标题】:setTimeout inside mocha test doesn't workmocha 测试中的 setTimeout 不起作用
【发布时间】:2014-06-02 09:11:37
【问题描述】:

我正在使用如下所示的函数。我正在使用 async 系列来测试异步功能。该系列中的第一个回调工作得非常好,并且在名为 callThisGuy(client, callback) 的第二个方法中全部中断

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

即使状态不是“新”,也永远不会调用 setTimeout 函数。它而是跳到下一步。我在没有 Mocha 的情况下运行了相同的代码,然后超时工作正常。

在 mocha 内部,它不起作用。我还检查了 setTimeout 是否未定义。它被定义了。我想知道我是否遗漏了什么。

【问题讨论】:

标签: node.js asynchronous coffeescript mocha.js


【解决方案1】:

如果我只能阅读coffeescript,我可以提供更多帮助。这么丑。 :(

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 2021-04-26
      相关资源
      最近更新 更多