Sinon假callOnce没有检测到第二次异步调用的呼叫

问题描述 投票:0回答:1

以下是我的第二个假冒没有检测到已经进行了调用的代码。

我有一个具有创作者功能的课程。 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)
})
javascript async-await sinon
1个回答
1
投票

你只需要一个小改动。

在断言之前等待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
})
© www.soinside.com 2019 - 2024. All rights reserved.