Jasmin: Asynchrone callback wurde nicht aufgerufen, innerhalb von timeout angegeben, die von Jasmin.DEFAULT_TIMEOUT_INTERVAL
Ich habe ein eckiges service namens requestNotificationChannel
:
app.factory("requestNotificationChannel", function($rootScope) {
var _DELETE_MESSAGE_ = "_DELETE_MESSAGE_";
function deleteMessage(id, index) {
$rootScope.$broadcast(_DELETE_MESSAGE_, { id: id, index: index });
};
return {
deleteMessage: deleteMessage
};
});
Ich versuche, Komponententest dieser service mit Jasmin:
"use strict";
describe("Request Notification Channel", function() {
var requestNotificationChannel, rootScope, scope;
beforeEach(function(_requestNotificationChannel_) {
module("messageAppModule");
inject(function($injector, _requestNotificationChannel_) {
rootScope = $injector.get("$rootScope");
scope = rootScope.$new();
requestNotificationChannel = _requestNotificationChannel_;
})
spyOn(rootScope, '$broadcast');
});
it("should broadcast delete message notification", function(done) {
requestNotificationChannel.deleteMessage(1, 4);
expect(rootScope.$broadcast).toHaveBeenCalledWith("_DELETE_MESSAGE_", { id: 1, index: 4 });
done();
});
});
Lese ich über die Asynchrone Unterstützung in Jasmin, aber da bin ich ziemlich neu zu unit-Tests mit javascript konnte nicht damit es funktioniert.
Ich erhalte eine Fehlermeldung :
Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL
und mein test dauert zu lange zum ausführen (etwa 5s).
Kann mir jemand helfen die Bereitstellung von arbeiten Beispiel von meinem code mit einer Erläuterung?
Die Verarbeitung von Ereignissen erfolgt in der Regel in einem digest-Zyklus. Versuchen Sie, hinzufügen von scope.$anwenden() in den test statt mit Jasmine async-Test-Muster
dies hat auch nicht geklappt. Ich fügte hinzu, scope.$apply(); einfach nach dem Aufruf requestNotificationChannel.deleteMessage(1, 4), aber ich receivethe gleiche Fehlermeldung...
Ich bekomme den gleichen Fehler, wenn async-tests dauern länger als
dies hat auch nicht geklappt. Ich fügte hinzu, scope.$apply(); einfach nach dem Aufruf requestNotificationChannel.deleteMessage(1, 4), aber ich receivethe gleiche Fehlermeldung...
Ich bekomme den gleichen Fehler, wenn async-tests dauern länger als
Jest
erwartet - sehr Häufig beim Debuggen und nehmen einige Zeit, um untersuchen Variablen.InformationsquelleAutor Mdb | 2014-03-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein argument in Ihrem
it
Funktion (done
im code unten), wird verursachen, Jasimne zu versuchen, einen asynchronen Aufruf.Es nicht einen Unterschied machen, was die
done
argument benannt ist, dessen Existenz alles ist, was zählt. Ich lief in dieses Problem von zu viel copy/pasta.Den Jasmin Asynchrone Unterstützung docs beachten Sie, dass argument (benannt
done
oben) ist ein callback, die aufgerufen werden können, lassen Sie Jasmin kennen, wenn eine asynchrone Funktion abgeschlossen ist. Wenn Sie nie nennen, Jasmin wird nie wissen, dein test ist gemacht und wird schließlich timeout.Es ist dokumentiert, ich habe möchte schlug vor, die Bearbeitung der Dokumentation: stackoverflow.com/suggested-edits/2434606
Hinweis zu random-Google-Mitarbeiter, kommen über diese Frage in die Zukunft: wenn Sie mit Winkelmesser und laufen in dieses Problem, diese Antwort ist nicht, was Sie suchen - Winkelmesser ruft die callback-von selbst.
Es fixiert mein problem und es wurde verursacht durch die gleichen cuplrit "copy/pasta"
I ran into this issue from too much copy/pasta
Classic line und so wahr 😀InformationsquelleAutor mastaBlasta
Als Problemumgehung können Sie den Grenzwert erhöhen timeout zu bewerten, eine asynchrone Jasmin Rückruf
Quelle: http://jasmine.github.io/2.0/introduction.html#section-42
Die original Jasmin.DEFAULT_TIMEOUT_INTERVAL 60000 ms. Damit in diesem Beispiel wird das tatsächlich sechs mal kürzer ist.
Du hast Recht, ich habe einfach eine zufällige Zahl in diesem Beispiel, danke 🙂
InformationsquelleAutor gsalgadotoledo
Dieser Fehler kann auch verursacht werden, durch weglassen von Spritzen, bei der Initialisierung einer Dienst - /Werks-oder was auch immer. Sie kann zum Beispiel ausgelöst werden, dies zu tun:
Um es zu beheben nur wickeln Sie die Funktion mit Spritzen richtig abrufen der service:
InformationsquelleAutor Katana24
verwenden fakeAsync
InformationsquelleAutor Lijo
Dieser Fehler begann aus heiterem Himmel für mich, auf einen test, der hatte immer geklappt. Ich konnte nicht finden, dass irgendwelche Vorschläge, dass geholfen, bis ich gemerkt habe, mein Macbook läuft schleppend. Mir ist aufgefallen das die CPU gebunden war von einem anderen Prozess, die ich getötet habe. Die Jasmin-async-Fehler verschwunden und meine tests sind gut wieder.
Frag mich nicht warum, ich weiß es nicht. Aber in meinem Fall schien zu einem Mangel an system-Ressourcen Verschulden trifft.
InformationsquelleAutor Eric Soyke
Erhalten Sie auch diese Fehlermeldung, wenn etwas erwartet in der
beforeAll
Funktion!InformationsquelleAutor Tom Van Rossom
Dies ist eher eine Beobachtung als eine Antwort, aber vielleicht hilft es anderen, die waren so frustriert, wie ich war.
Hielt ich immer diese Fehlermeldung aus beiden tests in meiner suite. Ich dachte, ich hätte einfach gebrochen die tests mit der Umgestaltung war ich dabei, so nach dem sichern der änderungen nicht funktioniert, ich kehrten zu früheren code, zweimal (zwei Revisionen zurück) denken, es würde loswerden die Fehler. Tun also sich nichts verändert. Ich jagte meinen Schwanz den ganzen Tag gestern, und ein Teil von heute morgen, ohne der Lösung des Problems.
Bekam ich frustriert und habe die code auf einem laptop heute morgen. Lief die gesamte test-suite (über 180 tests), keine Fehler. So die Fehler wurden nie in den code oder tests. Ging zurück zu meiner dev-box und den Computer neu gestartet, bis er klar, nichts im Speicher, die gewesen sein könnte die das Problem verursachen. Keine änderung, gleicher Fehler an der gleichen zwei Prüfungen. Also löschte ich das Verzeichnis von meiner Maschine, und aktiviert es wieder heraus. Voila! Keine Fehler.
Keine Ahnung, was Sie verursacht, oder wie man es beheben, aber löschen Sie das Arbeitsverzeichnis und überprüfen Sie es wieder aus fixen, was auch immer es war.
Hoffe, das jemand hilft.
InformationsquelleAutor delliottg
Funktioniert nach dem entfernen der
scope
Referenz und der Funktion Argumente:InformationsquelleAutor
In meinem Fall, dieser Fehler verursacht wurde durch unsachgemäße Nutzung des "fixture.detectChanges()" Es scheint, dieser Methode wird ein Ereignis-listener (async), die es nur zu reagieren, einen Rückruf, wenn änderungen erkannt werden. Wenn keine änderungen erkannt werden, wird es nicht auf den Rückruf, was in einem timeout-Fehler. Hoffe, das hilft 🙂
InformationsquelleAutor A. Figueroa
InformationsquelleAutor SoEzPz
Jasmin.DEFAULT_TIMEOUT_INTERVAL = 100000;
Halten diese in den block mein Problem gelöst.
InformationsquelleAutor Sai Prasad
Wenn Sie ein argument (
done
) in derit
Funktion versuchen, Sie zu entfernen, wie gut es ist-Aufruf innerhalb der Funktion selbst:wahrscheinlich der Anwender gelöst werden, indem sich selbst.
diese Antwort mein problem gelöst... eckig-Test ist ein Alptraum!
InformationsquelleAutor tiagor87
Können Sie karma-Jasmin plugin, um den Standard-Timeout-Intervall weltweit.
Fügen Sie diese in der config karma.conf.js
InformationsquelleAutor code.rookie