Angularjs 使用Resolve进行角度UI路由器测试
我对因果报应很陌生,我同样需要绝望的帮助 我将我的路线定义为:Angularjs 使用Resolve进行角度UI路由器测试,angularjs,unit-testing,karma-jasmine,Angularjs,Unit Testing,Karma Jasmine,我对因果报应很陌生,我同样需要绝望的帮助 我将我的路线定义为: angular .module('appRouter',['ui.router']) .config(function($stateProvider,$urlRouterProvider){ $stateProvider .state('settings',{ url:'/settings',
angular
.module('appRouter',['ui.router'])
.config(function($stateProvider,$urlRouterProvider){
$stateProvider
.state('settings',{
url:'/settings',
templateUrl:'templates/settings.html'
})
.state('settings.profile',{
url:'/profile',
templateUrl:'templates/profile.html'
})
.state('settings.account',{
url:'/account',
templateUrl:'templates/account.html',
controller:function(resolveData){
console.log(resolveData);
},
resolve:{
resolveData : function($http){
var root = 'https://jsonplaceholder.typicode.com';
return $http.get(root+'/posts/1').then(function(response){
return response.data;
});
}
}
});
$urlRouterProvider.otherwise('/settings/profile');
现在,为了测试基本路由功能,我尝试了以下方法:
describe('UI Routerer Config',function(){
var $state,$rootScope,$httpBackend,state = "settings.profile";
beforeEach(function(){
module('appRouter');
});
beforeEach(inject(function(_$rootScope_,_$state_,$templateCache){
$rootScope = _$rootScope_;
$state = _$state_;
$templateCache.put('templates/profile.html','');
}));
it('should respond to url',function(){
expect($state.href(state)).toBeDefined();
expect($state.href(state)).toEqual('#!/settings/profile');
});
});
它通过了
但我仍然无法使用resolve
进行测试
我不知道怎么做
有没有人能指导我并解释一下如何将这些测试结合起来。
作为一个新手,请解释一下这些步骤,我觉得很难
更新2
describe('UI Routerer Config For Account',function(){
var $state,$rootScope,$injector,$httpBackend,state = "settings.account";
beforeEach(function(){
module('appRouter');
});
beforeEach(inject(function(_$rootScope_,_$injector_,_$state_,$templateCache){
$rootScope = _$rootScope_;
$state = _$state_;
$injector = _$injector_;
$templateCache.put('templates/account.html','');
}));
it('should respond to url',function(){
expect($state.href(state)).toBeDefined();
expect($state.href(state)).toEqual('#!/settings/account');
});
it('should resolve "resolveData"',function(){
const state = $state.get('settings.account');
const resolveFn = state.resolve.resolveData;
const responseData = {
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto"
};
expect($injector.annotate(resolveFn)).toEqual(['$http']);
expect(resolveFn($http)).toEqual(responseData);
});
});
但它没能说出
should resolve "resolveData"
UI Routerer Config For Account
ReferenceError: $http is not defined
at Object.<anonymous> (test/controllers/main-controller-spec.js:97:26)
应解析“resolveData”
帐户的UI路由器配置
ReferenceError:$http未定义
反对。(测试/控制器/main-controller-spec.js:97:26)
希望这能有所帮助,这大致来自我测试过的config.routes:
inject((_$injector_, _$state_) => {
$injector = _$injector_;
$state = _$state_;
});
describe('foo', () => {
it('should resolve "resolveData"', () => {
const state = $state.get('settings.account');
const resolveFn = state.resolve.resolveData;
expect($injector.annotate(resolveFn)).toEqual(['$http']);
// It's here that you would mock out response.data and
// expect the resolveFn($http) to equal it; voila, you've
// tested that (one) resolve!
expect(resolveFn($http)).toEqual();
});
});
谢谢你的帮助。但它没有说出一个错误。请查看更新。