首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测试Angular 1服务

测试Angular 1服务
EN

Stack Overflow用户
提问于 2018-03-16 11:27:26
回答 1查看 36关注 0票数 0

我正在做一个Angular 1项目,在这个项目中我正在设置单元测试。所以,我需要测试一个服务,它的名称是"appSecurity“。此服务中的方法使用来自名为"userService“的服务的预加载用户数据。"appSecurity“服务只是从userService引用此用户数据,以做出适当的安全决策。

以下是appSecurity服务的一部分,以便于更好地理解:

代码语言:javascript
复制
function appSecurity($log, $http, $state, $q, localStorageService, userService, grcRoutes, appRolesConstant, controlAssessmentService) {
    appSecurity.routeToErrorPageIfNotFullAccessRoleInCM = function () {
        var controlRegisterRoles = _.find(userService.currentUser.controlRegisterUsers, function (controlRegisterUser) {
        var controlRegisterUserRole = controlRegisterUser.applicationRoles[0];
        return controlRegisterUserRole.name === appRolesConstant.FullAccess;
      });
   };
}

如您所见,此服务具有许多依赖项,如$log、$http、$state、$q、localStorageService、userService、grcRoutes、appRolesConstant、controlAssessmentService。其中之一是userService,它预加载了用户数据。

基本上,我希望能够在appSecurity服务中注入模拟的userService,这样我就可以测试它的方法,而不用担心它的依赖项数据。下面是一个对控制器执行相同操作的示例。

代码语言:javascript
复制
beforeEach(inject(function($controller) {
  $scope = $rootScope.$new();

  userService = {
    query: function() {
      queryDeferred = $q.defer();
      return {$promise: queryDeferred.promise};
    }
  }

spyOn(userService, 'query').andCallThrough();

// controller injected with mocked service. How can I do the same with a 
//service. In this case I want to instantiate appSecurity service like this 
//with inject mocked userService. 
  $controller('BreakfastCtrl', {
    '$scope': $scope,
    'userService': userService 
  });
}));

我们创建带有模拟依赖注入的控制器的方法是,有一种方法可以创建带有模拟注入的服务。在上面的代码中,我尝试用$service替换$controller,但它不起作用。

我想做这个,

代码语言:javascript
复制
$service('appSecurityService', {
   '$scope': $scope,
   'userService': userService 
});

但是在angular-mocks中找不到$service。任何帮助都是非常感谢的。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-03-16 18:55:15

服务和控制器是在不同的时间创建的,这就是为什么你不能像你尝试的那样去做。就像$controller一样,已经创建了beforeEach(inject(function($controller) {服务--这也只是一个服务。

您应该在创建模块时模拟服务:

代码语言:javascript
复制
beforeEach(angular.mock.module('module', ($provide) => {
                $provide.value(userService, {query: () => {}});
        }));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49312702

复制
相关文章

相似问题

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