Wie verwende ich Jasmine, um eine asynchrone Funktion zu testen, die lange braucht, um zu antworten?

8

Ich verwende eine Funktion, um Daten von Webapi zu holen. Verwenden Sie grundsätzlich $.ajax .

Ich teste es jetzt mit waits() wie folgt:

%Vor%

Das Problem ist:

  1. Es ist nicht garantiert, dass waits(2000) die Arbeit gut macht. Aus verschiedenen Gründen (Netzwerkverbindungen, Algorithmus-Effizienz der API, usw.), muss ich möglicherweise waits(5000) oder mehr, oder für einige Modelle waits(500) ist genug. Und die nervigste Sache ist, dass alles außer Kontrolle ist.
  2. Eine Menge von waits() lässt die Test-Specs-Runs sehr lange warten. Die Zeit, in der die ganze Suite läuft, ist zu lang, um sie zu akzeptieren.

Gibt es ein paar% davon, Dinge zu tun?

PS: Ich weiß, dass Unit-Tests nicht auf Funktionen angewendet werden sollten, die auf Webapi oder Datenbanken basieren. Aber ich arbeite mit einer Single-Page-js-Heavy-Webapp. Der Datenabrufprozess ist genauso wichtig, wie ich ihn mit js-Modellen konsumieren werde.

    
hbrls 14.01.2013, 09:05
quelle

3 Antworten

11

waitsFor() wird auf einen angegebenen Latch-Callback warten, um true zurückzugeben (es wird alle paar ms viele Male versucht). Es wird auch eine Ausnahme ausgelöst, wenn das angegebene Timeout (in diesem Fall 5000 ms) überschritten wird.

%Vor%

Weitere Informationen zu waitsFor() und runs()

finden Sie in den Jasmine-Dokumenten     
istepaniuk 14.01.2013, 10:11
quelle
2

Die folgende Lösung erlaubt es Ihnen, nicht länger als wirklich notwendig zu warten, aber Sie müssen immer noch das maximale Zeitlimit definieren, das Sie für ausreichend halten. Das waitsFor übernimmt die Funktion und wartet, bis true zurückgegeben wird oder das Zeitlimit abgelaufen ist, wenn das letzte Argument abgelaufen ist. Sonst schlägt es fehl.

Angenommen, dass r[0] überhaupt definiert ist, könnte es sein:

%Vor%     
zbynour 14.01.2013 10:02
quelle
-1

Gemäß Jasmine 2.5 können Sie einen zusätzlichen Parameter für it("scenario", callback, timeout)

übergeben %Vor%     
Amit Gupta 14.02.2017 06:23
quelle

Tags und Links