Node.js 如何使用process.nextTick进行测试

Node.js 如何使用process.nextTick进行测试,node.js,testing,asynchronous,mocha.js,sinon,Node.js,Testing,Asynchronous,Mocha.js,Sinon,我正在使用来测试一些代码,并希望使用来调用方法的回调 代码 测试 由于某种原因,我在运行mocha时调用了两次done()错误。如果我在.之外运行回调,则在通过spy(result)调用spy之前,您的测试正在调用expect(spy).have.been. 我假设当expect失败时,第一次调用done(测试完成并失败)。在下一个勾选中,done将从getnowns回调再次调用 sinon.stub(Word._wordnik, 'randomWords').yields(null, [

我正在使用来测试一些代码,并希望使用来调用方法的回调

代码 测试
由于某种原因,我在运行mocha时调用了两次
done()
错误。如果我在.

之外运行回调,则在通过
spy(result)
调用spy之前,您的测试正在调用
expect(spy).have.been.

我假设当expect失败时,第一次调用
done
(测试完成并失败)。在下一个勾选中,
done
将从
getnowns
回调再次调用

sinon.stub(Word._wordnik, 'randomWords').yields(null, [
                          {id: 1234, word: "hello"},
                          {id: 2345, word: "foo"},
                          {id: 3456, word: "goodbye"}
                        ]
                      )

Word.getNouns (result) ->
  expect(result).to.deep.equal [
    {id: 1234, word: "hello"},
    {id: 2345, word: "foo"},
    {id: 3456, word: "goodbye"}
  ]
  done()
您不需要spy来检查传递给
getnowns
回调的值,您可以在回调中立即执行断言

sinon.stub(Word._wordnik, 'randomWords').yields(null, [
                          {id: 1234, word: "hello"},
                          {id: 2345, word: "foo"},
                          {id: 3456, word: "goodbye"}
                        ]
                      )

Word.getNouns (result) ->
  expect(result).to.deep.equal [
    {id: 1234, word: "hello"},
    {id: 2345, word: "foo"},
    {id: 3456, word: "goodbye"}
  ]
  done()

没有完全理解最后一句话——在
process.nextTick()
之外会发生什么?
sinon.stub(Word._wordnik, 'randomWords').yields(null, [
                          {id: 1234, word: "hello"},
                          {id: 2345, word: "foo"},
                          {id: 3456, word: "goodbye"}
                        ]
                      )

Word.getNouns (result) ->
  expect(result).to.deep.equal [
    {id: 1234, word: "hello"},
    {id: 2345, word: "foo"},
    {id: 3456, word: "goodbye"}
  ]
  done()