2016-07-14 4 views
0

тест Ajax блок с помощью Жасмин «TypeError: Не удается прочитать свойство„сделано“неопределенных»

function download() { 
 
    $.ajax({ 
 
     method: 'GET', 
 
     url: 'http://jsonplaceholder.typicode.com/posts', 
 
    }).done(function(data) { 
 
     //processJasonData(data) 
 
    }).fail(function() { 
 
     //$fail(); 
 
    }) 
 
}

Im пытается сделать модульное тестирование с жасмином с помощью Ajax, но я получаю «Ошибка типа: Не удается прочитать свойство«сделано «неопределенного».

describe('AJAX check', function() { 
 
    var url = "http://jsonplaceholder.typicode.com/posts"; 
 

 
    it('test1', function() { 
 
     spyOn($, "ajax"); 
 
     download(url); 
 
     expect($.ajax).toHaveBeenCalled(); 
 
    }); 
 

 
});
Кто знает, как решить эту проблему? И как проверить, когда выполняется ajax? Думаю, я должен использовать обещания и отложить в этом случае, так может кто-нибудь объяснить их мне? (I`m с помощью JQuery> 1.5)

кода отдыха:

function download(url) { 
 
    $.ajax({ 
 
     method: 'GET', 
 
     url: url, 
 
    }).done(function(data) { 
 
     processJasonData(data) 
 
    }).fail(function() { 
 
     $fail(); 
 
    }) 
 
} 
 

 
function $fail() { 
 
    var error_msg_1 = '<div class="jumbotron text-center"><h1 style="size: 10px;color: red"> Faill </h1></div>'; 
 
    $('.tresc').html(error_msg_1); 
 
} 
 
function processJasonData(data) { 
 
    var _data = $('.panel-group'); 
 
    var dataTemplate = $('#item_tmp').html(); 
 
    $.each(data, function (i, item) { 
 
     _data.append(Mustache.render(dataTemplate, item)); 
 
    }); 
 
}

+0

Вы используете плагин «жасмин-аякс»? –

+0

да, я использую это. –

+0

вы можете проверить погоду «mock-ajax.js» загруженный перед тем, как увидеть пример здесь http://jasmine.github.io/2.0/ajax.html –

ответ

0

Jasmines spyOn блокирует вызов функции и "проглатывает" он (возвращающийся неопределенным). Чтобы передать вызов функции шпиона, используйте spyOn($, 'ajax').and.callTrough(). See Jasmine Docs.

+0

этот тест работает! но как сделать callFake, чтобы убедиться, что это сделано или что-то еще, чтобы проверить это? –

+0

Вы можете использовать '.and.returnValue()' и использовать поддельный объект с функциями 'done' и' fail'. Чтобы узнать, работает ли работа ajax-вызовов, вы можете использовать ajax-plugin http://jasmine.github.io/2.0/ajax.html – Herku