utilisant jasmin ajax dans les tests ressemble à ceci:
describe('Sample test', function(){
var request = function(arg){
return new Promise(function(resolve, reject){
$.ajax({
method:'GET',
url: 'example.com/api/'+arg,
success: function(response){
resolve(changeResponse(response));
},
error: reject
});
});
function changeResponse(response){
return response.key + '-changed';
}
};
var TestResponses = {
someEndPoint: {
success: {
status: 200,
responseText: '{"key":"value"}'
}
}
};
beforeEach(function(){
jasmine.Ajax.install();
});
afterEach(function(){
jasmine.Ajax.uninstall();
});
it('can be called with for some end-point', function(){
spyOn($, 'ajax');
request('something');
expect($.ajax).toHaveBeenCalled();
var actualAjaxOptions = $.ajax.calls.mostRecent().args[0];
expect(actualAjaxOptions).toEqual(jasmine.objectContaining({
method:'GET',
url: 'example.com/api/something',
}));
});
it('modifies response as expected', function(done){
request('something').then(function(){
expect(arguments[0]).toEqual('value-changed');
done();
}, function(reason){
done.fail();
});
jasmine.Ajax.requests.mostRecent().respondWith(TestResponses.someEndPoint.success);
});
})
Moyens noter que:
jasmin ajax est actuellement compatible avec une bibliothèque qui utilise XMLHttpRequest. Testé avec jQuery et Zepto.
(de docs)
vous voulez tester si la réponse ajax correctement ou que vous voulez tester la fonction de rappel? – cwang
vous avez besoin de [jasmine-ajax] (https://github.com/jasmine/jasmine-ajax) – xmike
@crystalwill Dans ma fonction à tester, je manipule réellement la réponse et je fais quelque chose avec elle donc je veux tester si le réponse a été changé après mon appel Ajax –