Я пытаюсь выполнить модульное тестирование функции, логика ядра которой c выполняется в setImmediate
, например:
код:
public async myFunc() {
setImmediate(async () => {
// core logic
someModule.foo();
});
}
модульный тест:
const mock1: jasmine.Spy = spyOn(...);
const mock2: jasmine.Spy = spyOn(someModule, 'foo');
myFunc().then(() => {
expect(someModule.foo).toHaveBeenCalledTimes(3);
});
Мой тест не пройден с someModule.foo was called 0 times
. Когда я отлаживал тест, причина его неудачи в том, что макет не используется реальным кодом. Весь тест не пройден, потому что вместо использования mock2
в тесте используются фактические производственные логи c. Однако, если я удалю setImmediate
, тест будет работать нормально.
Как я могу это исправить?