jasmine.js attendre() ne fonctionne pas à l'intérieur d'un rappel asynchrone
Je suis de se familiariser avec le Jasmin (http://pivotal.github.com/jasmine/) et a trouvé quelque chose d'assez déroutant:
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
});
expect(true).toEqual(false);
});
Échoue comme prévu.
Toutefois, le déplacement du attendre appeler à l'intérieur de la fonction de rappel:
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
expect(true).toEqual(false);
});
});
En quelque sorte de passe :O
Après un peu de débogage:
l'api.sendGhostRequest() est asynchrone requête ajax, et le jasmin se précipite passé avant que la requête est terminée.
D'où la question:
Comment puis-je obtenir jasmin attendre pour l'ajax d'exécution avant de vérifier le résultat du test?
- Avec le Jasmin 2.0 vous suffit de l'appeler("desc",function(done){... done(); ...}). Il suffit de dire, parce que ce fil est élevé dans les résultats de google 🙂
Vous devez vous connecter pour publier un commentaire.
Modifier pour Jasmine 2
Asynchrone tests sont devenus beaucoup plus simple dans le Jasmin 2. Tous les tests que doit gérer le code asynchrone peut être écrit avec un rappel qui indique la fin de l'essai. Voir la Jasmin 2 docs sous l'en-tête Asynchrone Soutien
Jasmin 1
Ont un coup d'oeil à waitsFor() et pistes() sur le Jasmin site sous l'en-tête Asynchrone Soutien.
Utilisation des pistes et waitsfor devrait forcer le Jasmin pour attendre l'appel ajax pour finir ou pour dépassement du temps.
Le code devrait ressembler à:
Auquel cas le fait de s'attendre serait un échec.
Comme @pkopac commenté,
runs()
etwaitsFor()
ont été désapprouvées dans la v2 faveur de l'utilisation d'undone()
de rappel comme documenté: https://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Supportdone
doit être dans les paramètres de la fonction à utiliser.it("should be able to send a Ghost Request", function(done) {
Regarder en séries() et waitfor()
Plus précisément, vous pouvez appeler waitfor pour vérifier que le rappel a exécuté d'une certaine façon (peut-être l'aide d'un booléen comme un chèque?) et puis exécutez l'attendre par la suite.
pistes vous permet d'attendre jusqu'à ce que l'attente est terminée.
async jasmin documentation