2016-07-14 13 views
0

Ajax Unit-Test mit Jasmin „Typeerror: kann Eigenschaft‚done‘undefinierten lesen“

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

Im Versuch, Unit-Test mit Jasmin mit Ajax zu machen, aber ich erhalte „Typeerror: kann Eigenschaft lesen‚getan 'von undefiniert'.

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

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

 
});
Wer weiß, wie man dieses Problem zu lösen? Und wie überprüft man, wenn Ajax fertig ist? Ich denke, ich sollte in diesem Fall Versprechungen und Verzögerungen verwenden, also kann mir jemand sie erklären? (I`m mit jQuery> 1.5)

Rest Code:

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

Verwenden Sie das Plugin "Jasmine-Ajax"? –

+0

ja, ich benutze das. –

+0

können Sie überprüfen, Wetter "mock-ajax.js" vor dem Beispiel hier geladen http://jasmine.github.io/2.0/ajax.html –

Antwort

0

Jasmines spyOn blockiert den Aufruf der Funktion und "schluckt" it (Rückkehr nicht definiert). Um den Anruf an die spionierte Funktion zu übergeben, verwenden Sie spyOn($, 'ajax').and.callTrough(). See Jasmine Docs.

+0

dieser Test funktioniert! aber wie man CallFake macht, um zu sehen, ob es fertig ist, oder etwas anderes, um das zu überprüfen? –

+0

Sie könnten '.and.returnValue()' verwenden und ein falsches Objekt verwenden, das eine 'done'- und eine' fail'Funktion hat. Um zu sehen, ob Ajax Anrufe funktioniert können Sie das Ajax-Plugin http://jasmine.github.io/2.0/ajax.html verwenden – Herku