Если вы этого еще не сделали, вам нужно смоделировать функцию close()
в подтверждение, так что он просто мгновенно возвращает разрешенное значение Promise
.
Поскольку вы имеете дело с асинхронным кодом, вам нужно обернуть функцию подтверждения it
в вызове fakeAsync
.Это оборачивает ваш код подтверждения в специальную зону тестирования, которая имитирует асинхронное поведение для вас (для получения дополнительной информации см. документацию fakeAsync ).Тогда вам нужно всего лишь позвонить на tick
, чтобы «продвинуть (виртуальные) часы».Это гарантирует, что вся асинхронная активность будет завершена после этого вызова.
Примерно так должен выглядеть ваш код:
it("should call callback", fakeAsync(() => {
//todo: confirmationDialog should be injected by you via TestBed.get() or something similar
spyOn(confirmationDialog, "close").and.returnValue(Promise.resolve(true));
const spy = jasmine.createSpy();
closeDialogAction(spy);
tick();
expect(spy).toHaveBeenCalled();
}));
Обратите внимание, что вам нужно создать экземпляр переменной translationDialog либо путем внедрения, либо вручную, в зависимости от вашей кодовой базы.