[英]Testing angularJS ui-router resolve functions
我正在使用ui路由器0.2.15和茉莉花1.3测试角度1.3(咖啡)
我的模块设置如下
angular.module('myModule', [
'ui.router'
])
.config ($stateProvider) ->
$stateProvider.state 'dashboard.settings.account',
url: '/account'
controller: 'SettingsAccountController'
templateUrl: 'dashboard/settings/account/account.tpl.html'
resolve:
phones: (Resolver) ->
return Resolver.resolvePhones()
问题是:如何测试状态内的解析功能? 我在控制器中模拟了resolve服务,因此其他测试也可以正常工作,但是我不知道如何使用此特定功能。
您只需要在加载controller
之前注入已解决的service
。
var phones;
beforeEach(inject(function(Resolver){
phones = Resolver.resolvePhones()
}));
现在将这部phones
插入您的控制器中。
不了解CoffeeScript语法,但这是我在常规JS中测试简单路由配置的方式。
describe('ui-router config', function() {
var $rootScope, $state, $injector, myServiceMock, state = 'dashboard.settings.account';
beforeEach(function() {
module('myModule', function($provide) {
$provide.value('Resolver', myServiceMock = {});
});
inject(function(_$rootScope_, _$state_, _$injector_, $templateCache) {
$rootScope = _$rootScope_;
$state = _$state_;
$injector = _$injector_;
$templateCache.put('template.html', '');//empty html content
})
});
it('should respond to URL', function() {
expect($state.href(state)).toEqual('#/state');
});
it('should resolve data', function() {
myServiceMock.resolvePhones= jasmine.createSpy('resolvePhones').andReturn('findAll');
// for jasmine version greater than 2.0, replace "andReturn" with "and.returnValue"
$state.go(state);
$rootScope.$digest();
expect($state.current.name).toBe(state);
// Call invoke to inject dependencies and run function
expect($injector.invoke($state.current.resolve.data)).toBe('findAll');
});
});
这也是我第一次测试路由配置。 如果您的服务未返回承诺,则此方法效果很好。 服务方法返回promise时,我遇到了问题。 让我知道您是否可以将其与服务返回承诺一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.