Cómo vaciar condicionalmente un $ timeout en la prueba de unidad angular

Tengo un código que es algo como esto:

function doThing() {
  if (invalidInput) {
    console.error('Invalid input.');
    return;
  }

  $timeout(function() {
    MyService.doThing();
  }, 1000);
}

Quiero probar esoMyService.doThing no se llama cuando se pasa una entrada no válida.

Si llamodoThing(invalidInput) sin hacer$timeout.flush(), MyService.doThing no se llamaría, independientemente de si tengo líneas 2-5. Entonces, para probar realmente siMyService.doThing se llama cuando se pasa una entrada no válida, necesito llamar$timeout.flush.

El problema es que arroja un error si intento descargar cuando no hay nada que eliminar.Error: No deferred tasks to be flushed.

¿Cómo puedo manejar este escenario? Me gustaría hacer algo como$timeout.flushIfFlushable().

Respuestas a la pregunta(2)

Su respuesta a la pregunta