我正在尝试编写茉莉花单元测试以测试角度控制器,并且遇到注入服务并返回承诺的问题。
我有一个从服务器检索数据的服务:
app.factory('LookupService', ['$resource', '$http', '$cookies',
function ($resource, userId) {
return $resource('./Controller/GetFunction', {}, {
query: { method: 'GET', params: { userId: userId }, isArray: true }
});
}]);
在控制器中调用:
$scope.returnedDataStore = lookupService.get({ userId: $scope.userId });
$scope.returnedDataStore.$promise.then(function (result) {
$scope.processData(result.data);
});
在我的单元测试中,我正在注入此服务,如下所示:
beforeEach(function () {
module('app');
lookupService = jasmine.createSpyObj('LookupService', ['get']);
inject(function ($rootScope, $controller, $q) {
$scope = $rootScope.$new();
var deferred = $q.defer();
lookupService.get.and.returnValue(deferred.promise);
ctrl = $controller('myController', {
$scope: $scope,
LookUpService: lookupService
});
});
});
但是,在控制器中调用服务时,我收到一条错误,指出$scope.returnedDataStore.$promise
未定义:
无法读取属性'然后'未定义的
我经常搜索以试图解决这个问题,但我没有太多运气。
如果有人能指出我正确的方向,我会非常感激!
答案 0 :(得分:0)
我通常做的是 -
处理服务承诺并将promise对象返回给控制器,看看它对你有用:
describe('Controller: mainCtrl', function() {
beforeEach(module('myApp'));
var mainCtrl,
scope,
someService,
spyGetSomething;
beforeEach(inject(function($controller, $rootScope) {
someService = {
getSomething: function() {}
};
spyGetSomething = spyOn(someService, 'getSomething').andReturn({
then: function() {}
});
mainCtrl = $controller('mainCtrl', {
$scope: scope,
SomeService: someService
});
});
...
it('Should call SomeService.getSomething() ', function() {
expect(spyGetSomething).toHaveBeenCalled();
});
});
(注意:没有测试)