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().

questionAnswers(2)

yourAnswerToTheQuestion