Ich verwende eine Funktion, um Daten von Webapi zu holen. Verwenden Sie grundsätzlich $.ajax
.
Ich teste es jetzt mit waits()
wie folgt:
Das Problem ist:
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. 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.
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.
Weitere Informationen zu waitsFor()
und runs()
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:
Gemäß Jasmine 2.5 können Sie einen zusätzlichen Parameter für it("scenario", callback, timeout)
Tags und Links javascript jasmine