Jquery ajax在单元测试中加载JSON

时间:2011-01-11 16:35:02

标签: jquery unit-testing json synchronous jasmine

我试图在茉莉花中加载一个数据集,用于我的测试... 然而,作为一个json调用我似乎总是得到测试表示为#34;它"在使用其数组之前等待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 个答案:

答案 0 :(得分:3)

您可以使用$ .ajax()并在参数中将async设置为false,然后使用.parseJSON()解析JSON,而不是使用$ .getJSON:

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

    }
});

我会警告你,如果调用花费很长时间,将async设置为false会导致浏览器显示为冻结,但它会阻止任何其他JavaScript或jQuery代码执行,直到调用完成并加载数据(假设呼叫成功)。