Eu realmente preciso retornar uma promessa em teste ao usar o Chai como Prometido?

Chai como prometidodocumentação afirma da seguinte maneira:

Aviso prévio: devolver ou notificar (concluído) deve ser usado com asserções de promessa.

E os exemplos no site são os seguintes:

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

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

A coisa é; Na verdade, eu escrevi um teste usando chai como prometido sem retornar a promessa. Igual a:

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

E funciona perfeitamente bem. Tenho certeza de que faz isso ao alterar testUser para outra coisa em que o teste falha. Assim como eu esperava. Portanto, não tenho certeza se estou fazendo algo errado aqui.

De fato, quando modifiquei o código para retornar uma promessa, ele falhou com o erro "Erro: o tempo limite de 2000ms foi excedido. Verifique se o retorno de chamada done () está sendo chamado neste teste". O código modificado está abaixo:

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

Um pouco confuso aqui. Pode ter algo a ver com Angular $ q. Para deixar claro, a função resolve.user retorna uma promessa de $ q.

questionAnswers(1)

yourAnswerToTheQuestion