我正在尝试测试我的控制器,该控制器在启动服务时将返回包含用户名的诺言。它总是失败,我不明白为什么。
模块:
(function () {
'use strict';
angular.module('dilib', [
// Angular modules
'ngAnimate',
'ngRoute',
// Custom modules
'dilib.layout',
// 3rd Party Modules
'LocalStorageModule',
'restangular'
])
.config(function (RestangularProvider) {
RestangularProvider.setBaseUrl('http://localhost/services/webapi/');
})
.config(function (localStorageServiceProvider) {
localStorageServiceProvider.setPrefix('dilib');
});
})();
控制器:
(function () {
'use strict';
var controllerId = 'requestAuthorizationController';
angular
.module('dilib')
.controller(controllerId, requestAuthorizationController);
requestAuthorizationController.$inject = ['requestAuthorizationService'];
function requestAuthorizationController(requestAuthorizationService) {
/* jshint validthis:true */
var vm = this;
vm.username = undefined;
activate();
function activate() {
return requestAuthorizationService.requestAuthorization().then(function (result) {
vm.username = result;
return vm.username;
});
}
}
})();
服务内容:
(function() {
'use strict';
var serviceId = 'requestAuthorizationService';
angular
.module('dilib')
.service(serviceId, requestAuthorizationService);
requestAuthorizationService.$inject = ['$q'];
function requestAuthorizationService($q) {
//API
var service = {
requestAuthorization: requestAuthorization,
}
return service;
/////////////////////////////////////////////////////////////////////
function requestAuthorization(user) {
var defer = $q.defer();
defer.resolve('visitor');
return defer.promise;
}
}
})();
规格:
//requestAuthorizationController Specification
'use strict';
describe('requestAuthorizationController Specification', function() {
var RestangularProvider,
localStorageServiceProvider,
controller,
requestAuthorizationServiceMock,
$rootScope,
scope;
beforeEach(function () {
angular.module('ngAnimate', []);
angular.module('ngRoute', []);
angular.module('dilib.layout', []);
//angular.module('LocalStorageModule', []);
angular.module('http-auth-interceptor', []);
//angular.module('restangular', []);
});
beforeEach(function() {
module('dilib', function(_RestangularProvider_, _localStorageServiceProvider_, $provide) {
RestangularProvider = _RestangularProvider_;
localStorageServiceProvider = _localStorageServiceProvider_;
$provide.service('requestAuthorizationService', function ($q) {
this.requestAuthorization = jasmine.createSpy('requestAuthorization').and.callFake(function(result) {
var defer = $q.defer();
defer.resolve('visitor');
return defer.promise;
});
});
});
});
beforeEach(inject());
beforeEach(inject(function ($controller, _$rootScope_, requestAuthorizationService) {
controller = $controller;
requestAuthorizationServiceMock = requestAuthorizationService;
$rootScope = _$rootScope_;
scope = $rootScope.$new();
}));
it('Provides the authenticated user name', function() {
var vm = controller('requestAuthorizationController');
expect(vm.username).toBe('visitor');
});
});
这是the子。
感谢您的任何提前帮助!
我找到了解决方案。我忘了叫$ rootScope。$ apply()。现在看起来像这样。
it('Provides the authenticated user name', function() {
var vm = controller('requestAuthorizationController');
expect(vm.username).toBe('visitor');
});
这是the子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句