【问题标题】:Cover ajax calls in jasmine test在 jasmine 测试中覆盖 ajax 调用
【发布时间】:2019-11-22 14:14:16
【问题描述】:

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

代码sn-p如下

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();
});

});

【问题讨论】:

    标签: javascript ajax karma-jasmine


    【解决方案1】:

    您到底想测试什么? 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 );
    }
    

    【讨论】:

    • @vli020 我想测试成功回调。如果不提取到某个变量,它如何工作。
    • 你不能,因为它是一个匿名函数。在您的单元测试中,您可能不想对后端进行真正的调用
    猜你喜欢
    • 2019-12-26
    • 2018-11-04
    • 2013-07-14
    • 1970-01-01
    • 2016-07-09
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多