Jasmine Fiddle

by Winter Soldier

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.5.2/jasmine.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.5.2/jasmine-html.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.5.2/boot.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.5.2/jasmine.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.js"></script>
<div id="myElement"></div>

JavaScript

errorFunction = function(jqXHR, status, error) {  
  console.log('This is errorFunction')  
}

var makeAPICall = function(url) {
  return $.ajax({
    url: url,
    fail: errorFunction,
    error: errorFunction
  });
}

var testFunction = function() {
  makeAPICall().done(function(data, status, xh) {
    if (xh.status === 0 && xh.readyState == 4) {
      errorFunction();
      return;
    }
    console.log("this is successFunction");
  }).fail(errorFunction);
}

getData = function() {
  var str = 'ABCDEFGHIJ'
  var returnStr = '';
  for (var i = 0; i < 3000; i++) {
    returnStr += str;
  }
  return returnStr;
}

describe('test ajax errors', function() {
  it('tests a failed call due to huge payload ', function() {
    var xhrObj = $.ajax({
      url: 'https://jsonplaceholder.typicode.com/posts?userId=' + getData(),
      async: false
    });
    console.log('Below is the xhr object that is breing returned via spy');
    console.log(xhrObj);    
    spyOn(window, 'makeAPICall').and.returnValue(xhrObj);
    spyOn(window, 'errorFunction').and.callThrough();    
    testFunction();
    expect(window.errorFunction).toHaveBeenCalled();
  });
  
  it('tests a failed call due to some n/w error scenario (readyState->4, status->0)', function() {
    var xhrObj = $.ajax({
      url: '',      
      async: false
    });
    xhrObj.status = 0;
    xhrObj.statusText = 'error';
    console.log('Below is the xhr object that is breing returned via spy');
    console.log(xhrObj);    
    spyOn(window, 'makeAPICall').and.returnValue(xhrObj);
    spyOn(window, 'errorFunction').and.callThrough();    
    testFunction();
    expect(window.errorFunction).toHaveBeenCalled();
  });
  
  it('tests a failed call (bad url pattern)', function() {
    var xhrObj = $.ajax({
      url: 'https://jsonplaceholder.typicode.com/postssss/1',
      async: false
    });
    console.log('Below is the xhr object that is breing returned via spy');
    console.log(xhrObj);    
    spyOn(window,...