Я пишу сервис Angular, который использует requestIdleCallback для вызова другой функции, foo
. В моем тесте я хочу убедиться, что в конечном итоге вызывается foo
.
В настоящее время у меня есть тест, который выглядит следующим образом:
it('test', fakeAsync(() => {
// Triggers a requestIdleCallback call.
service.doSomething();
flush();
expect(otherService.foo).toHaveBeenCalled();
}));
Но когда я запускаю этот тест, Я получаю сообщение о том, что otherService.foo
никогда не вызывался. Я пытался заменить грипп sh на flushMicroTasks()
и tick()
с длинным таймером, но безрезультатно. Единственное, что до сих пор работало, - это использование done()
и добавление setTimeout
к самому тесту, например, так:
it('test', (done) => {
// Triggers a requestIdleCallback call.
service.doSomething();
setTimeout(() => {
expect(otherService.foo).toHaveBeenCalled();
done();
}, 1);
});
Но я бы хотел избежать этого, потому что это может вызвать некоторую ошибку. Можно ли гарантировать, что requestIdleCallback
было сброшено до того, как я сделаю свое тестовое утверждение?