2017-09-28 2 views
0

Par exemple quelque chose comme çaComment puis-je tester l'unité une fonction qui déclenche un appel Ajax au jasmin

func do something() 
{ 
api.ajax('') //Ajax call that triggers inside the function 
.done(response){ 
do something with response 
} 
} 

Comment puis-je attendre quelque chose de la réponse et de faire mes affirmations? Toute aide serait vraiment utile! Merci d'avance!

+0

vous voulez tester si la réponse ajax correctement ou que vous voulez tester la fonction de rappel? – cwang

+0

vous avez besoin de [jasmine-ajax] (https://github.com/jasmine/jasmine-ajax) – xmike

+0

@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 –

Répondre

0

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)

+0

Je vais jeter un coup d'oeil et de revenir à ce post –