我正在尝试为我的家庭模块编写一个测试,但我一直收到一个错误,说'&34;未知提供商:服务"。如果我在home模块中更改resolveSomething以返回一个字符串我的应用程序工作,所以我知道我的决心是有效的。我只是在学习如何编写测试,所以任何建议都会受到高度赞赏。
服务
angular.module( 'services', [])
.factory('service', function(){
return {
'users' : function(id) {
return id;
}
}
});
主页的相关部分
angular.module('home', ['ui.router','services'])
.config(function config( $stateProvider, service) {
$stateProvider.state( 'homeWithId', {
url: '/home/:id',
views: {
"main": {
controller: 'HomeCtrl',
templateUrl: 'home/home.tpl.html'
}
},
resolve:{
resolveSomething: function() {
return service.users(this.params.id);
}
}
})
})...
测试的相关部分......我认为
describe( 'Test home controller', function() {
beforeEach( module( 'home' ) );
beforeEach( module( 'services' ) );
beforeEach(inject(function($injector) {
$location = $injector.get('$location');
$rootScope = $injector.get('$rootScope');
$httpBackend = $injector.get('$httpBackend');
$scope = $rootScope.$new();
$state = $injector.get('$state');
service = $injector.get('service');
var $controller = $injector.get('$controller');
createController = function() {
return $controller('HomeCtrl', {
'$scope': $scope,
resolveSomething: function() { console.log('resolveSomething'); },
service : service
});
};
...
旁注...如果我只是在解析中返回一个字符串,我可以使用此测试配置访问控制器内的服务。
家庭控制器(工作和可测试)
.controller( 'HomeCtrl', ['$scope', 'resolveSomething','service', function( $scope, resolveSomething, service) {
alert(service.users(1));
...
答案 0 :(得分:0)
问题是service
是服务,而不是提供者。当你致电module.config()
时,你只能注射提供者;您的service
尚未构建。我相信您需要做的是更改您的解析器以请求服务作为依赖项(我还没有使用UI状态提供程序,所以我可能错了):
angular.module('home', ['ui.router','services'])
.config(function config($stateProvider) {
$stateProvider.state( 'homeWithId', {
url: '/home/:id',
views: {
"main": {
controller: 'HomeCtrl',
templateUrl: 'home/home.tpl.html'
}
},
resolve:{
resolveSomething: function(service) {
return service.users(this.params.id);
}
}
});
});