我正在使用 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/