jasmine: Async de rappel n'a pas été invoquée dans délai spécifié par le jasmin.DEFAULT_TIMEOUT_INTERVAL
J'ai angulaire service appelé 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
};
});
Je suis en train de test de l'unité de ce service à l'aide de 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();
});
});
J'ai lu sur le Asynchrones Soutien dans le Jasmin, mais comme je suis plutôt nouvelle pour les tests unitaires avec javascript ne pouvais pas le faire fonctionner.
Je reçois un message d'erreur :
Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL
et mon test est trop long à exécuter (environ 5s).
Quelqu'un peut-il m'aider en fournissant de travail exemple de mon code avec quelques explications?
Le traitement des événements est généralement fait dans un condensé de cycle. Essayez d'ajouter de la portée.$appliquer() à votre test au lieu d'utiliser Jasmin asynchrone test pattern
ce n'est pas travaillé. J'ai ajouté de la portée.$appliquer(); juste après l'appel de requestNotificationChannel.deleteMessage(1, 4), mais je receivethe même erreur...
Je reçois la même erreur lors de la async tests prennent plus de temps que
ce n'est pas travaillé. J'ai ajouté de la portée.$appliquer(); juste après l'appel de requestNotificationChannel.deleteMessage(1, 4), mais je receivethe même erreur...
Je reçois la même erreur lors de la async tests prennent plus de temps que
Jest
attend - très fréquent pendant le débogage et en prenant le temps d'inspecter des variables.OriginalL'auteur Mdb | 2014-03-24
Vous devez vous connecter pour publier un commentaire.
Avoir un argument dans votre
it
fonction (done
dans le code ci-dessous) cause Jasimne pour tenter un appel asynchrone.Il n'est pas de faire une différence ce que le
done
argument est nommé, son existence est tout ce qui compte. J'ai rencontré ce problème de trop de copier/pâtes.Le Jasmin Asynchrone Soutien docs noter que l'argument (nommé
done
ci-dessus) est un rappel qui peut être appelée pour permettre de Jasmin savoir quand une fonction asynchrone est terminée. Si vous n'avez jamais l'appeler, de Jasmin ne connaîtra jamais votre test est fait et finira par timeout.Il est documenté, j'ai justed suggéré une modification à se référer à la documentation: stackoverflow.com/suggested-edits/2434606
Note aléatoire des Googlers de revenir sur cette question dans l'avenir: si vous utilisez un Rapporteur d'angle et de courir sur cette question, cette réponse n'est pas ce que vous êtes à la recherche pour - Rapporteur appelle la fonction de rappel par lui-même.
Il fixe mon problème et il a été causé par le même cuplrit "copier/pâtes"
I ran into this issue from too much copy/pasta
Ligne classique et tellement vrai 😀OriginalL'auteur mastaBlasta
Comme une solution de contournement, vous pouvez augmenter la limite de délai d'attente pour l'évaluation d'un async Jasmin rappel
Source: http://jasmine.github.io/2.0/introduction.html#section-42
L'original de jasmin.DEFAULT_TIMEOUT_INTERVAL 60000 ms. Donc, cet exemple fait il est six fois plus courte.
Vous avez raison, je viens de mettre un nombre aléatoire dans cet exemple, merci 🙂
OriginalL'auteur gsalgadotoledo
Cette erreur peut également être due en laissant de côté les injecter lors de l'initialisation d'un service/d'usine ou quoi que ce soit. Par exemple, il peut être levée par le faire:
De le fixer simplement envelopper la fonction avec l'injection pour récupérer correctement le service:
OriginalL'auteur Katana24
utilisation fakeAsync
OriginalL'auteur Lijo
Cette erreur a commencé hors de la bleue pour moi, sur un test qui avait toujours travaillé. Je ne pouvais pas trouver toutes les suggestions qui ont aidé jusqu'à ce que j'ai remarqué que mon Macbook a été fonctionne lentement. J'ai remarqué que le PROCESSEUR avait été fixé par un autre processus, qui je l'ai tué. Le Jasmin async d'erreur a disparu et mes tests sont très bien une fois de plus.
Ne me demandez pas pourquoi, je ne sais pas. Mais dans mon cas, il semblait être un manque de ressources système à la faute.
OriginalL'auteur Eric Soyke
Vous obtiendrez cette erreur lorsque attend quelque chose dans le
beforeAll
fonction!OriginalL'auteur Tom Van Rossom
C'est plus un constat qu'une réponse, mais il peut aider d'autres personnes qui ont été frustrée comme j'étais.
J'ai continué à obtenir cette erreur à partir de deux tests dans ma suite. Je pensais que j'avais tout simplement cassé les tests avec le refactoring je faisais, donc après la sauvegarde, les changements ne fonctionne pas, je revenue plus tôt code, à deux reprises (deux révisions de retour) à penser que ça serait de se débarrasser de l'erreur. Le faire n'a rien changé. J'ai chassé de ma queue toute la journée d'hier et une partie de ce matin, sans résoudre le problème.
Je me suis senti frustré et vérifié le code sur un ordinateur portable ce matin. A couru toute la suite de tests (environ 180 tests), pas d'erreurs. Donc, les erreurs n'ont jamais été dans le code ou les tests. Je suis retourné dans ma boîte de dev et redémarré pour effacer quoi que ce soit dans la mémoire qui pourrait avoir été à l'origine du problème. Pas de changement, même des erreurs sur les deux mêmes tests. Alors j'ai supprimé le répertoire à partir de ma machine, et vérifié à revenir. Voila! Pas d'erreurs.
Aucune idée de ce qu'elle fait, ou comment résoudre le problème, mais de supprimer le répertoire de travail et de vérifier qu'il fixe ce qu'il était.
Espère que cela aide quelqu'un.
OriginalL'auteur delliottg
Dans mon cas, cette erreur a été causée par une mauvaise utilisation de "fixture.detectChanges()" Il semble que cette méthode est un écouteur d'événement (async) qui répondra uniquement un rappel lorsque des modifications sont détectées. Si aucune modification n'est détectée, il ne sera pas appeler la fonction de rappel, résultant en une erreur de dépassement de délai. Espérons que cela aide 🙂
OriginalL'auteur A. Figueroa
Œuvres après la suppression de la
scope
de référence et les arguments de la fonction:OriginalL'auteur
Vous pouvez utiliser karma-jasmin plugin pour définir l'intervalle de temps par défaut à l'échelle mondiale.
Ajouter cette config karma.conf.js
OriginalL'auteur code.rookie
OriginalL'auteur SoEzPz
de jasmin.DEFAULT_TIMEOUT_INTERVAL = 100000;
Maintenant ceci dans le bloc de résoudre mon problème.
OriginalL'auteur Sai Prasad
Si vous avez un argument (
done
) dans leit
fonction d'essayer de les supprimer ainsi c'est l'appel à l'intérieur de la fonction elle-même:probablement l'utilisateur résolu par lui-même.
cette réponse a résolu mon problème... angulaire de test est un cauchemar!
OriginalL'auteur tiagor87