angularjs - 如何使用 Jasmine 测试调用返回 Promise 的服务方法的 AngularJS Controller

标签 angularjs jasmine

我正在使用 AngularJS v1.2.0-rc.3 和 Jasmine 测试框架。

我试图断言 Controller 调用服务方法。服务方法返回一个 promise 。 Controller 看起来像这样:

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单元测试中模拟 promise 指南。

我做错了什么?

最佳答案

看来我把我的 spy 放在了错误的地方。当我将它放在 beforeEach 中时,测试通过。

  beforeEach(inject(function($controller, $rootScope, $q) {
    svc = {
      query: function () {
        def = $q.defer();
        return def.promise;
      }
    };
    spyOn(svc, 'query').andCallThrough();
    scope = $rootScope.$new();
    controller = $controller('ctrl', {
      $scope: scope,
      svc: svc
    });
  }));

关于angularjs - 如何使用 Jasmine 测试调用返回 Promise 的服务方法的 AngularJS Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19563369/

相关文章:

node.js - Jasmine:测试一个方法是否被另一个类的另一个方法调用

javascript - 如何从 jszip 和 angularjs 中的 zipobject 获取 csv 文件对象

在 Visual Studio 代码中调试 gulp 运行的 jasmine 测试用例?

javascript - 使用 jasmine 测试 javascript 库

Javascript 对字符串数组的重要性进行排序

javascript - 如何在 Protractor 自动化中使用 Javascript 命名空间?

angular - 在 stackblitz 中将测试用例添加到 Angular 应用程序时出错

html - 设置网格样式结果的问题

javascript - 如何通过 Angular 中的嵌套指令向下传递包含?

javascript - 如何在rails应用程序中包含angularjs库文件