加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 我如何测试用Karma嘲笑的承诺?

发布时间:2020-12-17 17:07:15 所属栏目:安全 来源:网络整理
导读:我的代码是: $scope.openModal = openModal; function openModal(data){ var info = data || {} ModalService.showModal({ templateUrl: ENVApp+"/myview.html",controller: "ModalController",inputs: { icon : "",title: "Additional",data : info } }).t
我的代码是:

$scope.openModal = openModal;


  function openModal(data){
    var info = data || {}
    ModalService.showModal({
        templateUrl: ENVApp+"/myview.html",controller: "ModalController",inputs: {
          icon : "",title: "Additional",data : info
        }
      }).then(function (modal) {
        modal.element.modal();
        modal.close.then(function (res) {
          if(res.data != 'cancel'){
            if(!res.data.id){
              create(res)
            }else{
              update(res)
            }
          }
        });
      });
  }

用Karma测试这个的正确方法是什么?这是我到目前为止所拥有的:

在我的beforeEach中:

this.ModalService = {
    showModal: function(obj) {
      var deferred = $q.defer();
      deferred.resolve({
        element: {
          modal: jasmine.createSpy(),close: function() {
            var deferred2 = $q.defer();

            return deferred2.promise;
          }
        }
      });
      return deferred.promise;
    }
  };
  this.UserService = {
    user: {
      id: 2
    },updateCategory: function(data,type) {
      var deferred = $q.defer();
      deferred.resolve({
        data: {
          rows: 'response'
        }
      });
      return deferred.promise;
    }
  }
  this.controller = $controller('ProfileAdditionalController',{
    '$scope': this.scope,'$rootScope': this.rootScope,'$state': this.state,"$stateParams": this.stateParams,'ModalService': this.ModalService,'UserService': this.UserService,'ResourceService': this.ResourceService,'$upload': this.upload,'userData': this.userData
  });

对于我的实际测试:

it('should open a modal when requested',function() {
    this.scope.openModal();
    expect(this.ModalService.showModal)
  });

但这并没有多大意义.思考?

解决方法

要在控制器上测试openModal函数,基本上您要验证以下内容(3个测试)

>使用一些特定选项调用ModalService.showModal
>一旦显示模态,验证then函数正在执行它想要做的事情
>当模态关闭时,验证第二个函数是否正在执行它想要做的事情

首先,您可能需要在ModelService.showModal上设置间谍(模拟):
spyOn(ModalService,’showModal).and.returnValue($q.when(mockModal))

现在在你的测试中,你将触发函数和$scope.$digest调用:

$scope.openModal(data);
$scope.$digest() // to propagate the `resolve()` result of the promise)

这将触发第一个然后回调,(将mockModal作为参数传递),然后您可以验证其行为.

类似于验证第二个回调,您需要模拟已解析的模态对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读