Я пытаюсь создать тест на Angular с использованием Jasmine, который должен соответствовать обоим условиям, когда обещание HTMLMediaElement.play()
разрешено и отклонено.Попытка выяснить это следующим образом:
it('should start playing audio file', async(() => {
new Audio('path/to/my.mp3').play().then(
() => {
console.log('SUCCESS');
expect(true).toBeFalsy('FROM RESOLVE');
},
() => {
console.log('ERROR');
expect(true).toBeFalsy('FROM REJECT');
}
);
}));
Я не могу понять, почему, когда обещание отклонено, все в порядке:
ОШИБКА (в консоли)
Ожидается, что истина будет ложной 'ОТ ОТКАЗА' (от Жасмин)
, но когда обещание выполнено, мой тест также должен провалиться, но он проходит (без ошибок от Жасмин), и я получаю следующее вконсоль:
SUCCESS
Необработанный Отклонение обещания: «ожидание» использовалось, когда не было текущей спецификации, это может быть из-за истечения времени ожидания асинхронного теста;Зона: ProxyZone;Задача: Promise.then;Значение: Ошибка: «ожидание» использовалось, когда не было текущей спецификации, это может быть из-за истечения времени ожидания асинхронного теста
Почему expect
не работает, когда разрешается это обещание?
ОБНОВЛЕНИЕ
Следующие два примера сделали свое дело (спасибо @quirimmo):
it('should start playing audio file', async () => {
await new Audio('path/to/my.mp3').play().then(
() => {
console.log('SUCCESS');
expect(true).toBeFalsy('FROM RESOLVE');
},
() => {
console.log('ERROR');
expect(true).toBeFalsy('FROM REJECT');
}
);
});
it('should start playing audio file', (done) => {
new Audio('path/to/my.mp3').play().then(
() => {
console.log('SUCCESS');
expect(true).toBeFalsy('FROM RESOLVE');
done();
},
() => {
console.log('ERROR');
expect(true).toBeFalsy('FROM REJECT');
done();
}
);
});