在茉莉花测试中覆盖ajax调用

时间:2019-11-22 05:55:44

标签: javascript ajax karma-jasmine

我正在尝试为具有Ajax调用的javascript文件编写茉莉花单元测试。不知道如何通过茉莉花测试覆盖“成功”功能下的部分。

代码段如下

function getGroups(){
 var defer = _$q.defer();
  $.ajax( {
      url: 'xyz',
      data: 'abc',
      async: false,
      type: 'POST',
      dataType: 'xml',
      success: function( xml ) {
          var groups = [];
          groups = xml.getElementsByTagName( 'requiredGroup' );
          defer.resolve( groups );
      }
  } );
  return defer.promise;
}

我尝试了以下解决方案,但这未涵盖成功功能下的代码:

 describe("getGroups() does ajax call", function() {
    beforeEach(function() {
      spyOn($, 'ajax');
    });

   it("call on success", function() {
   getGroups();
   expect($.ajax).toHaveBeenCalled();
});

});

1 个答案:

答案 0 :(得分:0)

您到底要测试什么? ajax调用或成功回调。确保有人测试了它的行为符合预期。

如果要测试成功回调,则可能需要将其提取到某个变量中,然后进行测试:

function getGroups(){
 var defer = _$q.defer();
  $.ajax( {
      url: 'xyz',
      data: 'abc',
      async: false,
      type: 'POST',
      dataType: 'xml',
      success: function(xml) {
          onSuccess(xml, defer);
      }
  } );

  return defer.promise;
}

const onSuccess = function( xml, defer) {
       var groups = [];
       groups = xml.getElementsByTagName( 'requiredGroup' );
       defer.resolve( groups );
}