Sinon поддельный вызов, как только не обнаруживает вызов для второго асинхронного вызова - PullRequest
0 голосов
/ 04 марта 2019

Ниже приведен код, где моя вторая фальшивка не обнаруживает, что был сделан вызов.

У меня есть класс с функцией создателя.Функция создателя возвращает класс с несколькими асинхронными функциями.

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)
})

1 Ответ

0 голосов
/ 04 марта 2019

Вам просто нужно одно небольшое изменение.

Дождитесь завершения 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
})
...