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

如何测试与茉莉花AngularJS控制器调用服务方法返回承诺

发布时间:2020-12-17 08:17:18 所属栏目:安全 来源:网络整理
导读:我正在使用AngularJS的v1.2.0-rc.3与茉莉花测试框架。 我试图断言一个控制器调用一个服务方法。服务方法返回承诺。控制器如下所示: angular.module('test',[]).controller('ctrl',['$scope','svc',function ($scope,svc) { $scope.data = []; svc.query() .
我正在使用AngularJS的v1.2.0-rc.3与茉莉花测试框架。

我试图断言一个控制器调用一个服务方法。服务方法返回承诺。控制器如下所示:

angular.module('test',[])
.controller('ctrl',['$scope','svc',function ($scope,svc) {
  $scope.data = [];
  svc.query()
  .then(function (data) {
    $scope.data = data;
  });
}]);

当服务方法的延迟被解析时,我想测试数据被分配给作用域。我创建了一个模拟的服务,单元测试看起来像这样:

describe('ctrl',function () {
  var ctrl,scope,svc,def,data = [{name: 'test'}];
  beforeEach(module('test'));
  beforeEach(inject(function($controller,$rootScope,$q) {
    svc = {
      query: function () {
        def = $q.defer();
        return def.promise;
      }
    };
    scope = $rootScope.$new();
    controller = $controller('ctrl',{
      $scope: scope,svc: svc
    });
  }));
  it('should assign data to scope',function () {
    spyOn(svc,'query').andCallThrough();
    deferred.resolve(data);
    scope.$digest();
    expect(svc.query).toHaveBeenCalled();
    expect(scope.data).toBe(data);
  });
});

我期望svc的查询方法被调用,但显然没有。

我遵循this指南来嘲笑单位测试的承诺。

我究竟做错了什么?

看来我把我的间谍放在错误的地方。当我把它放在前面的时候,测试通过了。
beforeEach(inject(function($controller,$q) {
    svc = {
      query: function () {
        def = $q.defer();
        return def.promise;
      }
    };
    spyOn(svc,'query').andCallThrough();
    scope = $rootScope.$new();
    controller = $controller('ctrl',svc: svc
    });
  }));

(编辑:李大同)

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

    推荐文章
      热点阅读