У меня есть следующее, которое я пытаюсь проверить:
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
не вызывается к моменту утверждения.