Используя Jest, как я могу проверить шаги, выполняемые при разрешении обещания в функции под модульным тестом?
Пример:
// FUNCTION TO TEST
export function functionToTest(url) {
initSomething().then(() => {
console.info('YEP, CALLED');
storeHistory.push(url);
});
}
// UNIT TEST
import { functionToTest, __RewireAPI__ as rewireUtility } from './funcToTest';
describe('functionToTest', () => {
let pushSpy;
beforeEach(() => {
pushSpy = jest.fn();
rewireUtility.__set__('storeHistory', { push: pushSpy });
rewireUtility.__set__('initSomething', () => Promise.resolve());
});
it('pushes the given url to history after initializing cordova', () => {
functionToTest('/sports');
expect(pushSpy).toHaveBeenCalledTimes(1);
expect(pushSpy).toHaveBeenCalledWith('/sports');
});
});
В этом случае pushSpy вызывается 0 раз (даже если журнал распечатывается). Как я могу правильно проверить это?
Хорошо, я пробовал этот маршрут. Тот же результат, удаляя его.
простите, что удалить? ~удалено~ нет, мой плохой
Я был бы склонен отказаться от использования rewire самостоятельно. Вы должны иметь возможность jest.mock initSomething, но это вряд ли что-то решит.
Если я использую следующее, время ожидания истекает.. global.history = { push: (route) => { expect(route).ToEqual('/sports'); done(); }}; (но вызывается console.info..)
Аргх, тупой я. Это история магазина не window.history, ее не правильно смоделировали.
круто, я пытался разобраться, что это за история.. 8) ..также, вместо удаления await нужно return initSomething().then(()... и сделать тест асинхронным, т.е. describe('functionToTest', async () => {
Еще не решил, даже издевался над правильным объектом истории. Вопрос обновлен.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Решено с помощью этого:
it.only('pushes the given url to history after initializing cordova', (done) => {
rewireUtility.__Rewire__('history', { push: (route) => {
expect(route).toEqual('/sports');
done();
} });
functionToTest('test://sports');
});
во-первых, ваш
functionToTestне возвращает обещание, поэтомуawaitнечего ждать, поэтому он не будет.