[英]How to unit test onEnter and resolve of ui-router state
我正在尝试测试从以下状态的onEnter调用的Angular UI Bootstrap模式:
.state("profile.index.edit.services", {
url: "/edit/services/:serviceCode",
parent:"profile.index",
onEnter: ['$stateParams', '$state', '$modal',function($stateParams, $state, $modal) {
$modal.open({
templateUrl: 'profile/edit-services-modal.html',
controller: 'ProfileEditServicesController',
resolve: {
profileData: function(CacheService){
return CacheService.getItem(CacheService.Items.Profile.loadedProfile);
},
allServicesList: function(ProfileService){
return ProfileService.getAllServicesList($stateParams.serviceCode,$stateParams.orgId);
},
serviceCode: function() {
return $stateParams.serviceCode;
}
}
}).result.then(function(result) {
if (result) {
return $state.transitionTo("profile.index", { orgId: $stateParams.orgId });
}
else { // cancel
return $state.transitionTo("profile.index", { orgId: $stateParams.orgId }); // don't reload
}
}, function () {
// executes on close/cancel/ESC
return $state.transitionTo("profile.index", { orgId: $stateParams.orgId });
});
}]
})
我一直在为此努力尝试许多不同的事情来设置测试,但似乎无法弄清楚。 任何矮人或建议都将不胜感激!!!!
顺便说一句,上面的状态是这些状态的后代,我已经能够为此通过编写测试:
.state('profile.index', {
url: '/:orgId',
views: {
'profile-index@profile': {
templateUrl: 'profile/view-profile.html',
controller: 'ProfileController'
},
'header@': {
templateUrl: 'common/layout/header.html',
controller: 'HeaderController'
},
'footer@':{
templateUrl: 'common/layout/footer.html',
controller: 'FooterController'
}
},
resolve: {
profileData: function(ProfileService, $stateParams){
return ProfileService.getProfile($stateParams.orgId, true);
}
}
})
.state('profile.index.edit', {
url: '',
abstract: true
})
你有没有想过这个? 您应该已经传递了一个命名的控制器,这样您就可以直接测试该控制器(因为它只是一个函数),而不是依赖于被触发的onEnter。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.