¿Realmente necesito devolver una promesa en la prueba cuando uso Chai como prometido?

Chai como prometidodocumentación declara lo siguiente:

Aviso: ya sea devolver o notificar (hecho) debe usarse con afirmaciones de promesa.

Y los ejemplos en el sitio son los siguientes:

return doSomethingAsync().should.eventually.equal("foo");

doSomethingAsync().should.eventually.equal("foo").notify(done);

La cosa es; De hecho, escribí una prueba usando chai como lo prometí sin devolver la promesa. Al igual que:

it('should resolve user', function () {
    $state.get(state).resolve.user(dataservice, {
      userId: testUser.id
    }).should.eventually.eq(testUser);
    $rootScope.$apply();
  });

Y funciona perfectamente bien. Estoy seguro de que lo hace cuando cambio testUser por otra cosa que falla la prueba. Justo como lo esperaba. Así que no estoy seguro si estoy haciendo algo mal aquí.

De hecho, cuando modifiqué el código para devolver una promesa, falló con el error "Error: se excedió el tiempo de espera de 2000 ms. Asegúrese de que se llame a la devolución de llamada realizada () en esta prueba". El código modificado está debajo:

it('should resolve user', function () {
    var promise = $state.get(state).resolve.user(dataservice, {
      userId: testUser.id
    }).should.eventually.eq(testUser);
    $rootScope.$apply();
    return promise;
  });

Un poco confundido aquí. Podría tener algo que ver con Angular $ q. Para que quede claro, la función resolve.user devuelve una promesa $ q.

Respuestas a la pregunta(1)

Su respuesta a la pregunta