【发布时间】:2013-02-25 15:49:58
【问题描述】:
如何测试具有解析属性的控制器? 它抛出一个错误:未知提供者:InitProvider,在测试期间,可以理解。 如何测试?
我使用路由配置中的 init 属性来加载数据并在控制器实例化时将其传递给控制器,因此在加载数据之前路由不会改变。
$routeProvider
.when('/topic/:topic_id/content/:content_id', {
templateUrl: 'views/content.html',
controller: 'ContentCtrl',
resolve: {
init: ContentCtrl.init
}
});
模式一开始就完全错误吗?
'use strict';
var ContentCtrl = ['$scope', '$location', '$routeParams', 'init', function ($scope, $location, $routeParams, init) {
$scope.contents = init.contents;
}];
ContentCtrl.init = ['$q', 'app_config', '$log', '$timeout', function ($q, app_config, $log, $timeout) {
var defer = $q.defer();
$log.log("ContentCtrl loading..");
$timeout(function() {
defer.resolve({contents: [
{message: 'Hello!'}
]});
$log.log("ContentCtrl loaded.");
}, 2000);
return defer.promise;
}];
angular.module('studentportalenApp').controller('ContentCtrl', ContentCtrl);
我想将整个控制器封装在 .controler('ContentCtrl', function() { ... }) 中,但还没有弄清楚如何正确完成以使 init 在路由配置中可用。
【问题讨论】:
-
尝试将
ContentCtrl.init转换为角度service并在需要时将该服务作为依赖项注入
标签: unit-testing angularjs jasmine