Muss ich wirklich ein Versprechen im Test einlösen, wenn ich Chai wie versprochen verwende?

Chai wie versprochenDokumentatio lautet wie folgt:

Beachte: entweder return oder notify (done) muss mit Zusicherungen verwendet werden.

Und die Beispiele auf der Site lauten wie folgt:

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

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

Die Sache ist; Ich habe tatsächlich einen Test mit Chai geschrieben, ohne das Versprechen zu erwidern. Wie so:

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

Und es funktioniert einwandfrei. Ich bin mir sicher, dass der Test fehlschlägt, wenn ich testUser auf etwas anderes ändere. Genau wie ich erwartet hatte. Ich bin mir also nicht sicher, ob ich hier etwas falsch mache.

Wenn ich den Code so änderte, dass er ein Versprechen zurückgibt, schlug der Fehler fehl: "Fehler: Zeitüberschreitung von 2000 ms überschritten. Stellen Sie sicher, dass der Rückruf von done () in diesem Test aufgerufen wird." Der geänderte Code ist unten:

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

in bisschen verwirrt hier. Es könnte etwas mit Angular $ q zu tun haben. Um dies zu verdeutlichen, gibt die Funktion resolve.user ein $ q-Versprechen zurück.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage