如何在异步测试中计时sinon间谍

时间:2019-09-12 03:52:10

标签: javascript mocha sinon

我有异步测试,其中一个间谍在一个测试内启动,然后运行下一个测试,而间谍仍包裹在第一个测试内。这意味着assert(spy.calledOnce)失败。它被两次调用; assert(spy.calledTwice)通过但错误地通过; restore()没有及时被调用。

myModule.myMethod内部调用了间谍方法myControler.aMethod 我怎样才能解决这个问题?

it('test one', function() {
  sinon.spy(myModule, 'myMethod')
  myControler.aMethod().then(res => {
    // second test runs before this is called and calls it a second time
    assert(myModule.myMethod.calledOnce)    
    teamController.getAllTeamSlugs.restore()
  })
})
it('test two', function() {
  const fakeCache = {}
  // this runs before the above test can restore the spy
  myControler.aMethod().then(res => {
   // some asserts
  })
})

单独的描述块不能解决问题。

1 个答案:

答案 0 :(得分:0)

这是由于缺少return语句引起的。现在,块将等待,直到执行正确的时间。添加returns使得工作代码如下:

it('test one', function() {
  sinon.spy(myModule, 'myMethod')
  return myControler.aMethod().then(res => {
    // second test runs before this is called and calls it a second time
    assert(myModule.myMethod.calledOnce)    
    teamController.getAllTeamSlugs.restore()
  })
})
it('test two', function() {
  const fakeCache = {}
  // this runs before the above test can restore the spy
  return myControler.aMethod().then(res => {
   // some asserts
  })
})