2016-12-21 5 views
0

Я тестирование кода с помощью жасмин и создания фиктивного объекта для метода АЯКСАкод теста Ajax бросали ошибки

spyOn($,'ajax').and.callFake(function(e){ 
console.log("is hitting"); 
}) 

, чтобы проверить следующий фрагмент кода

$.ajax({ 
       url: AppManager.defaults.contextPath + "/solutions/mcn/mcn-lookup-list", 
       data: { 
        mcnNumber  : mcnNumberData, 
        mcnCustomerName : mcnCustomerNameData 
       }, 
       dataType: "json", 
       type: "GET", 
       global: false 
     }) 
     .done(function(data) { 
       solution.CommonObjects.theSolution.orderHandoff.mcnSearchData = self.filterMCNSearchData(data, resultObj); 
       $promise.resolve(); 
     }) 
     .fail(function() { 
      $promise.reject(); 
      self.displayErrorPopup('MCN Search Error','There is no MCN associated with MCN Number or MCN Customer Name Entered!!!'); 
     }); 
    }, 

Это бросает ошибку, не может читать сделано из неопределенного. Нужно ли мне создавать шпиона для этого. Пожалуйста, помогите с кодом, чтобы сделать так

ответ

0

Проблемы с кодом:

  • Вы шпионит это правильно, но вы должны отправить в promise объект обратно с помощью вашего шпиона. В принципе вам нужно вернуть что-то вроде этого ==>return new $.Deferred().resolve(dummyData).promise();
  • Существует несколько способов создания deferred object/promise object. Я предлагаю вам прочитать как Promise & Deferred
  • Также вы могли бы объяснить, откуда берется ваш $promise? это какая-то особенность require.js?

Ниже приведен один из способов поддельного вызова ajax.

var testObj = { 
    ajaxFunction: function() { 
     $.ajax({ 
     url: 'https://jsonplaceholder.typicode.com/posts/1' 
     }).done(function(data){ 
     consoleLogFunction(data); 
     }); 
    } 
}; 

var consoleLogFunction = function(data){ 
    console.log("The lengh of array is..=> "+ data.length); 
}; 

describe("ajax test suite", function() { 
    it("expect true to be true", function() { 
    var dummyData = ["Foo", "Boo"]; 
    spyOn($, 'ajax').and.callFake(function(e){ 
     return new $.Deferred().resolve(dummyData).promise(); 
    }); 
    spyOn(window, 'consoleLogFunction').and.callThrough(); 
    testObj.ajaxFunction(); 
    expect(window.consoleLogFunction).toHaveBeenCalledWith(dummyData); 
    }); 
}); 
Смежные вопросы