我正在用 Jasmine 测试一些 Angular.js 代码。为此,我需要一个 Angular 注入器:
var injector = angular.injector(['ng', 'ngRoute', 'mainModule']);
这很好用,但是当我开始测试使用 $location 的控制器时,我必须将其添加到注入器中:
var injector = angular.injector(['ng', 'ngRoute', 'location', 'mainModule']);
现在这会引发错误:
Error: Error: [$injector:modulerr] Failed to instantiate module location due to:
Error: [$injector:nomod] Module 'location' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
我如何在其中包含 $location 服务?谢谢。
- - - - - - - 编辑 - - - - - - - - -
由于答案不多,我想我会添加一些细节。
这是我正在尝试测试的控制器(或它的定义,我不会粘贴所有代码):
var app = angular.module('mainModule');
app.controller('appController', ['$window', '$scope', '$location', '$wsService', '$userService', '$labelService', function ($window, $scope, $location, $wsService, $userService, $labelService) {
//body of the controller
}]);
您已经在原始帖子的单元测试中看到了我是如何创建注入器的,以下是我如何使用注入器创建控制器:
var scope;
var controller;
var getController = function() {
injector.invoke( ['$rootScope', '$controller', function ($rootScope, $controller) {
scope = $rootScope.$new();
controller = $controller('appController', {$scope: scope});
}]);
};
希望这将有助于产生一些潜在的答案。谢谢