У меня есть следующий (упрощенный для упрощения задачи) код:
function pushPromises() {
const promises = [];
promises.push(firstPromise('something'))
promises.push(secondPromise('somethingelse'))
return promises;
}
export default handlePromises(async (c) => {
const results = await Promise.all(pushPromises())
c.success(results);
});
Мой тест проверяет эти firstPromise и secondPromise, чтобы проверить, были ли они вызваны с правильными аргументами.Это работает (предположим, что установка макета выполнена правильно):
jest.mock('src/firstPromise');
jest.mock('src/secondPromise');
describe('test', () => {
let firstMock;
let secondMock;
beforeEach(() => {
require('src/firstPromise').default = firstMock;
require('src/secondPromise').default = secondMock;
})
it('test', async () => {
await handlePromises(context);
expect(firstPromiseMock).toHaveBeenCalledTimes(1);
expect(secondPromiseMock).toHaveBeenCalledTimes(1);
});
});
Теперь, если я добавлю обработчики к обещаниям, таким как:
function pushPromises() {
const promises = [];
promises.push(
firstPromise('something')
.then(r => console.log(r))
.catch(e => console.log(e))
)
promises.push(
secondPromise('somethingelse')
.then(r => console.log(r))
.catch(e => console.log(e))
)
return promises;
}
Первое ожидание проходит, но второеникто неПохоже, второе обещание больше не вызывается.
Как я могу изменить тест / код, чтобы добавление обработчиков в обещаниях не приводило к разрыву теста?Похоже, что он просто завершает выполнение на первом обработчике обещаний и никогда не попадает на второй.
РЕДАКТИРОВАТЬ:
Я изменил функцию, чтобы возвращать Promise.all без ожидания:
export default handlePromises(async (c) => {
return Promise.all(pushPromises())
});
Но у меня точно такая же проблема.Второе обещание не вызывается, если у первого есть .then
.