[英]Angularjs and jasmine, testing promise
我正在嘗試測試我的控制器,該控制器在啟動服務時將返回包含用戶名的諾言。 它總是失敗,我不明白為什么。
模塊 :
(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');
});
這是矮人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.