我有异步测试,其中一个间谍在一个测试内启动,然后运行下一个测试,而间谍仍包裹在第一个测试内。这意味着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
})
})
单独的描述块不能解决问题。
答案 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
})
})