Как сделать утверждения для обратного вызова asyn c в блоке catch в Jest - PullRequest
0 голосов
/ 22 января 2020

У меня есть следующее, которое я пытаюсь проверить:

const Session = {
  loginWithPassword(email, password, loginErrorCallback) {
    API
      .loginWithPassword(email, password)
      .then(redirect => {
        window.location.assign(redirect)
      })
      .catch(() => {
        loginErrorCallback()
      })
  }
}

Я хочу заявить, что когда обещание не выполняется, обратный вызов действительно вызывается.

Так что в моих тестах У меня есть следующие настройки:

  ...
  jest.spyOn(API.auth, 'loginWithPassword')

  API.auth.loginWithPassword.mockImplementation(
    jest.fn(
      () =>
        new Promise((resolve, reject) => {
          resolve(response)
          reject()
        }),
    ),
  )
  ...
  it('it calls loginErrorCallback on unsuccessful auth', async () => {
    const loginErrorCallback = jest.fn()

    await Session.loginWithPassword(email, password, loginErrorCallback)
    setTimeout(() => expect(loginErrorCallback).toHaveBeenCalledTimes(1), 0)
  })

, если я сделаю утверждение без setTimeout, он выдаст мне следующую ошибку:

   expect(jest.fn()).toHaveBeenCalledTimes(expected)

    Expected number of calls: 1
    Received number of calls: 0

Так что, в принципе, loginErrorCallback не вызывается к моменту утверждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...