首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有定位服务的安祖拉赫喷射器

具有定位服务的安祖拉赫喷射器
EN

Stack Overflow用户
提问于 2014-04-28 14:31:39
回答 1查看 2.4K关注 0票数 1

我正在用茉莉花测试一些Angular.js代码。要做到这一点,我需要一个角度喷射器:

代码语言:javascript
复制
var injector = angular.injector(['ng', 'ngRoute', 'mainModule']);

这很好,但是当我测试一个使用$location的控制器时,我必须将它添加到注入器中:

代码语言:javascript
复制
var injector = angular.injector(['ng', 'ngRoute', 'location', 'mainModule']);

现在,这会引发一个错误:

代码语言:javascript
复制
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服务?谢谢。

-编辑-编辑

由于答案不多,我想我会补充一些细节。

下面是一个我正在尝试测试的控制器(或者它的定义,我不会粘贴所有代码):

代码语言:javascript
复制
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
}]);

您已经在原始文章中看到了如何在单元测试中创建注入器,下面是如何使用注入器创建控制器:

代码语言:javascript
复制
var scope;
var controller;
var getController = function() {
    injector.invoke( ['$rootScope', '$controller', function ($rootScope, $controller) {
        scope      = $rootScope.$new();
        controller = $controller('appController', {$scope: scope});
    }]);
};

希望这将有助于产生一些潜在的答案。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-30 10:37:41

回答我自己的问题。下面是如何测试以下控制器:

代码语言:javascript
复制
var app = angular.module('mainModule');

app.controller('appController', ['$window', '$scope', '$location', '$userService', function ($window, $scope, $location, $userService) {
    //body of the controller
}]);

单元测试中的1创建注入器:

代码语言:javascript
复制
var injector = angular.injector(['ng', 'ngRoute', 'mainModule']);

需要2调用服务:

代码语言:javascript
复制
injector.invoke( ['$userService',  function ($userService) {
    service     = $userService;
}]);

3模拟定位服务:

代码语言:javascript
复制
var mockLocation = {
    path : ""
};

我只需要path作为我正在测试的控制器,因此我没有模拟其他任何东西,而是模拟您需要的其他任何东西。

4调用控制器:

代码语言:javascript
复制
var scope;
var controller;
var getController = function() {
    injector.invoke( ['$rootScope', '$controller', function ($rootScope, $controller) {
        scope      = $rootScope.$new();
        controller = $controller('appController', {$scope: scope, $location: mockLocation});
    }]);
};

现在控制器可以用于单元测试。

这确实消除了“未知提供者”和其他与位置服务相关的错误。

多亏了作者,的博客文章帮了我一个忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23343849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档