JQuery AJAX загрузки JSON в модульных тестах - PullRequest
1 голос
/ 11 января 2011

Я пытаюсь загрузить набор данных в Жасмин для моих тестов, таких как ... Однако, так как это вызов json, я не могу всегда получить тест, обозначенный "it", чтобы дождаться завершения вызова JSON перед использованием его массива. Я попытался использовать функцию ajaxStop безрезультатно. Есть идеи?

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

 });

1 Ответ

3 голосов
/ 11 января 2011

Вместо использования $ .getJSON, вы можете использовать $ .ajax () и установить async в false в ваших параметрах, а затем проанализировать JSON с помощью .parseJSON ():

$.ajax({
    url: '/jasmine/obj.json',
    async: false,
    dataType: 'json',
    success: function(data) {
        var jsonvar = $.parseJSON(data);
        //your code here!

    }
});

Я предупрежу вас, что установка асинхронного в ложное значение может привести к тому, что браузер будет казаться замороженным, если вызов занимает много времени, но он будет препятствовать выполнению любого другого кода JavaScript или jQuery до тех пор, пока вызов не будет завершен и данные не будут загружены ( при условии успешного вызова).

...