我使用的功能类似于以下内容。我正在使用异步系列来测试异步函数。该系列中的第一个回调工作非常正常,它在第二个方法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是否未定义。它被定义了。我想知道我是否遗漏了什么。
答案 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.