функция jest не вызывается после выполнения обещания - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь проверить методы после выполнения обещания, используя Jest и энзим.Мой компонент / функциональный код:

// Functional Code
let functionAfterAsync = () => {
  console.log('functionAfterAsync called');
}
const asyncFunction = () => {
  return new Promise(resolve => resolve());
}
const functionWithAsyncCode = () => {
  // ... some more code here
  console.log('functionWithAsyncCode');
  asyncFunction().then((res: any) => {
    functionAfterAsync();
  })
}

Мой тест:

functionAfterAsync = jest.fn();
// Tests
describe('<Async Test />', () => {
    it('Call function after promise', () => {
      functionWithAsyncCode();
      expect(functionAfterAsync).toBeCalled();
    })
});

Но functionAfterAsync не вызывается, и я получаю ошибку: expect(jest.fn()).toBeCalled() Expected mock function to have been called.

Есть ли способ сделать это.Спасибо за помощь !!!

1 Ответ

0 голосов
/ 26 февраля 2019

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

Самый простой способ сделать это - вернуть Promise изfunctionWithAsyncCode:

const functionWithAsyncCode = () => {
  console.log('functionWithAsyncCode');
  return asyncFunction().then(() => {  // return the Promise
    functionAfterAsync();
  })
}

... затем дождитесь, пока он разрешит в вашем тесте:

it('Call function after promise', async () => {  // use an async test function
  await functionWithAsyncCode();  // wait for the Promise to resolve
  expect(functionAfterAsync).toBeCalled();  // SUCCESS
})

Кроме того, вы можете утверждать в.then и возвращают Promise из вашей тестовой функции :

it('Call function after promise', () => {
  return functionWithAsyncCode().then(() => {  // return the Promise
    expect(functionAfterAsync).toBeCalled();  // SUCCESS
  });
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...