Como liberar condicionalmente um $ timeout no teste de unidade angular
Eu tenho um código que é algo como isto:
function doThing() {
if (invalidInput) {
console.error('Invalid input.');
return;
}
$timeout(function() {
MyService.doThing();
}, 1000);
}
Eu quero testar issoMyService.doThing
não é chamado quando uma entrada inválida é passada.
Se eu ligardoThing(invalidInput)
sem fazer$timeout.flush()
, MyService.doThing
não seria chamado, independentemente de eu ter as linhas 2-5. Então, para realmente testar seMyService.doThing
é chamado quando uma entrada inválida é passada, eu preciso chamar$timeout.flush
.
O problema é que ele gera um erro se eu tentar liberar quando não há nada para liberar.Error: No deferred tasks to be flushed
.
Como posso lidar com esse cenário? Eu gostaria de fazer algo como,$timeout.flushIfFlushable()
.