我使用this策略,延迟加载的东西,在我的AngularJS应用RequireJS:单元测试AngularJS延迟加载控制器
define([
'src/services/dependency_resolver', // resolves promise when dependencies are `require`d
'json!modules.json'
], function (dependencyResolver, modules) {
var app = angular.module('myApp', [ 'ngRoute' ]);
app.config(function ($controllerProvider, $routeProvider) {
app.lazy = {
controller: $controllerProvider.register
// <...> other providers
};
angular.forEach(modules, function (moduleConfig) {
angular.forEach(moduleConfig.routes, function (route) {
$routeProvider.when(route.path, {
templateUrl: route.templateUrl,
controller: route.controller,
resolve: dependencyResolver(moduleConfig.dependencies)
});
});
});
});
return app;
});
但我不知道什么是正确的方法测试延迟加载控制器。据注册这样的:
define(['src/app'], function (app) {
app.lazy.controller('MainCtrl', function() {
//
});
});
这是我目前的规格:
describe('`MainCtrl` controller', function() {
var Ctrl,
$scope;
beforeEach(angular.mock.module('myApp'));
beforeEach(function (done) {
require(['module/main'], done);
});
beforeEach(function() {
angular.mock.inject(function ($rootScope, $controller) {
$scope = $rootScope.$new();
Ctrl = $controller('MainCtrl', {
$scope: $scope
});
});
});
it('should ...', function() {
console.log(Ctrl);
});
});
有了这个规范,被注册的控制时发生错误,因为app.lazy
是不确定的。
所以问题是如何测试这样的控制器?
干杯!