2014-01-21 55 views
2

我目前正在使用enyo,並且在一個組件上有一個函數,它需要一個回調函數並進行ajax調用,然後在成功時調用回調函數。我似乎無法弄清楚如何監視回調函數。你如何監視ajax與茉莉花的通話?

enyo.kind({ 
    name: 'Login', 
    isLoggedIn: function (callback) { 
     $.ajax({ 
     url: '/checkLogin' 
     }) 
     .done(function (data) { 
     /* Some logic here */ 
     return callback.apply(null, data); //IF all goes well this should call the spy 
     }) 
     .fail(function(){/*Fail Stuff*/}); 
    } 
    .... 
}); 

對於測試我有:

describe('Valid User', function() { 
    var ajaxSpy; 
    var loginTest = new Login(); 
    beforeEach(function() { 

     ajaxSpy = spyOn($, 'ajax').andReturn({ 
     done: function (fn) { 
      fn(); 
     }, 
     fail: function(){} 
     }); 
    }); 

    it("should call the callback", function() { 
     var spy = jasmine.createSpy("spy"); 
     loginTest.isLoggedIn(spy); 
     expect(spy).toHaveBeenCalled(); 
    }); 
} 

在這種情況下,當這個運行回調是不確定的,我認爲這是因爲AJAX間諜的可能攔截,但我不能確定如何解決它。

回答

3

ajax調用正在做的是返回一個叫promise的東西。

,你可以看看這個有各種文章認爲:

但底線這裏是關於如何實現這一目標的一些示例代碼:

spyOn($, 'ajax').andCallFake(function (params) {
  
    params.success({foo: 'bar'});
  
}); 

spyOn($, "ajax").andCallFake(function (params) {
   
    params.error({foo: "bar"});
  
});