Jquery ajax charge de JSON dans les tests unitaires
-
09-10-2019 - |
Question
Je suis en train de charger un jeu de données dans le jasmin pour mes tests comme tels ... Cependant comme un appel JSON Je ne peux pas semble toujours obtenir le test désigné par « il » attendre jusqu'à ce que l'appel JSON a terminé avant d'utiliser son tableau. J'ai essayé d'utiliser la fonction ajaxStop en vain. Toutes les idées?
describe("simple checks", function() {
var exampleArray = new Array();
beforeEach(function(){
$(document).ajaxStop(function() {
$(this).unbind("ajaxStop");
$.getJSON('/jasmine/obj.json', function(data) {
$.each( json.jsonattr, function(i, widgetElement) {
exampleArray.push(new widget(widgetElement));
});
});
});
});
it("use the exampleArray", function() {
doSomething(exampleArray[0]); // frequently this is coming up as undefined
});
La solution
Au lieu d'utiliser .ajax .getJSON $, vous pouvez utiliser $ () et false ensemble async dans vos paramètres, puis analyser le JSON en utilisant .parseJSON ():
$.ajax({ url: '/jasmine/obj.json', async: false, dataType: 'json', success: function(data) { var jsonvar = $.parseJSON(data); //your code here! } });
Je vous préviens que la mise async false peut que le navigateur apparaît gelé si l'appel prend beaucoup de temps, mais il empêchera tout autre code JavaScript ou jQuery d'exécuter jusqu'à ce que l'appel est terminé et les données sont chargées ( en supposant que l'appel est un succès).