我正在用茉莉花测试一些Angular.js代码。要做到这一点,我需要一个角度喷射器:
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});
}]);
};希望这将有助于产生一些潜在的答案。谢谢
发布于 2014-04-30 10:37:41
回答我自己的问题。下面是如何测试以下控制器:
var app = angular.module('mainModule');
app.controller('appController', ['$window', '$scope', '$location', '$userService', function ($window, $scope, $location, $userService) {
//body of the controller
}]);单元测试中的1创建注入器:
var injector = angular.injector(['ng', 'ngRoute', 'mainModule']);需要2调用服务:
injector.invoke( ['$userService', function ($userService) {
service = $userService;
}]);3模拟定位服务:
var mockLocation = {
path : ""
};我只需要path作为我正在测试的控制器,因此我没有模拟其他任何东西,而是模拟您需要的其他任何东西。
4调用控制器:
var scope;
var controller;
var getController = function() {
injector.invoke( ['$rootScope', '$controller', function ($rootScope, $controller) {
scope = $rootScope.$new();
controller = $controller('appController', {$scope: scope, $location: mockLocation});
}]);
};现在控制器可以用于单元测试。
这确实消除了“未知提供者”和其他与位置服务相关的错误。
多亏了作者,这的博客文章帮了我一个忙。
https://stackoverflow.com/questions/23343849
复制相似问题