以下是我的第二个假冒没有检测到已经进行了调用的代码。
我有一个具有创作者功能的课程。 creator函数返回一个具有很少异步函数的类。
const parentfn = {
fn1: async x => { return x + 1 },
fn2: async y => { return y + 2 },
fn3: (text) => {
console.error('Warning::', text)
return
}
}
const testClass = {
createParent: () => parentfn
}
const testMainFuntion = async (tc) => {
const parent = tc.createParent()
const var1 = await parent.fn1(1)
const var2 = await parent.fn2(1)
parent.fn3(var1 + var2)
}
然后将该类传递给我正在尝试测试的实际方法。似乎测试应该通过。
// Unit Test
it('should return updated value to the user', () => {
// testMainFuntion(testClass);
const fakeFn1 = sinon.fake.resolves(0)
const fakeFn2 = sinon.fake.resolves(0)
const fakeFn3 = sinon.fake();
const fakeParent = {
fn1: fakeFn1,
fn2: fakeFn2,
fn3: fakeFn3
}
const fakeCreate = {
createParent: () => fakeParent
}
testMainFuntion(fakeCreate)
//Passes
sinon.assert.calledOnce(fakeFn1)
//Fails
sinon.assert.calledOnce(fakeFn2)
})
你只需要一个小改动。
在断言之前等待testMainFuntion
完成:
it('should return updated value to the user', async () => { // <= use async test function
// testMainFuntion(testClass);
const fakeFn1 = sinon.fake.resolves(0)
const fakeFn2 = sinon.fake.resolves(0)
const fakeFn3 = sinon.fake();
const fakeParent = {
fn1: fakeFn1,
fn2: fakeFn2,
fn3: fakeFn3
}
const fakeCreate = {
createParent: () => fakeParent
}
await testMainFuntion(fakeCreate) // wait for testMainFuntion to complete
sinon.assert.calledOnce(fakeFn1) // SUCCESS
sinon.assert.calledOnce(fakeFn2) // SUCCESS
})