Ben ui-router İştebirim test arayüzü-yönlendirici yapılandırma, ui-yönlendiricinin çözmek işlevini verir hizmet vaadi
angular.module('myApp', ['ui.router']);
angular.module('myApp').config(stateConfig);
stateConfig.$inject = ['$stateProvider','$urlRouterProvider'];
function stateConfig($stateProvider, $urlRouterProvider) {
$stateProvider.state('view1', {
url: '/view1/:id?',
templateUrl: 'app/view1/view1.html',
resolve:{
init: ['$stateParams', 'view1Service', function($stateParams, view1Service){
if($stateParams.id !== ''){
return view1Service.getIdData($stateParams.id)
.then(function(response){
return { data: response.data, responseStatus: response.status };
}, function(response){
return { data:{}, responseStatus: response.status };
});
}
else{
return { data:{}, responseStatus: 200 };
}
}]
},
controller: 'View1Controller as controllerOne'
})
//some other routes with similar configuration
$urlRouterProvider.otherwise('/view1/');
}
kullanarak Uygulamam için sahip örnek rota yapılandırması çözüldü sonra bile beklenti sırasında söz ederken Şu an için sahip olduğum yukarıdaki kodun özelliğidir. View1 durumu için çözüm işlevi view1Service bağımlı olduğundan View1Service alay ettim ve bir söz vermemeye karar verdiyseniz (söz, alay hizmetinden döndürülmezse sonsuz sindirim() döngüsü oluşuyordu).
describe('ui router config', function() {
var $rootScope, $state, $injector, myServiceMock, state = 'view2', deferred, mockedService;
beforeEach(function() {
angular.mock.module('myApp');
angular.mock.module('ui.router');
angular.mock.module(function($provide){
$provide.factory('view1Service', function($q){
function getIdData(id){
deferred = $q.defer();
return deferred.promise;
}
return {getIdData: getIdData}
});
});
inject(function(_$rootScope_, _$state_, _$injector_, $templateCache, _$stateParams_, view1Service) {
$rootScope = _$rootScope_;
$state = _$state_;
$injector = _$injector_;
$stateParams = _$stateParams_;
$templateCache.put('app/view1/view1.html', '')
})
});
it('should respond to URL', function() {
expect($state.href(state, { id: 1 })).toEqual('#/view1/1');
});
it('should resolve data', function() {
$state.go(state, {id: '9999'});
deferred.resolve({
data: 'some data',
status: 666
});
$rootScope.$digest();
expect($state).toBe('checking');
expect($state.current.name).toBe(state+'q');
// Call invoke to inject dependencies and run function
expect($injector.invoke($state.current.resolve.init)).toBe('findAll+1');//this assertion fails with below error
});
});
Şu anda geçerli durumu iddia edebiliyorum. Çözüm işlevinin başarı ve başarısızlık geri dönüşlerini de test etmek istiyorum.
Ancak elde aşağıdaki hatayı tutmak:
Expected Promise({ $$state: Object({ status: 0 }) }) to be 'findAll+1'.
çözmek blok olarak yukarıdaki Promise nesne dönen tutar konusunda herhangi bir fikriniz. Her şeyden önce, view1Service çözüldüğü için bir söz vermemeliydi. Ve benim engellemek için bile olsa bile, blok çağırma bir cevabı döndürürse ifadesinin beklemesine kadar beklemiyor mu? Ben de çağırmayı denedim, o da işe yaramadı.
Herhangi bir yardım
çok takdir edilmektedir.