茉莉花测试的模拟服务?

时间:2014-03-06 13:11:17

标签: angularjs unit-testing jasmine

我是茉莉花测试的新手,我无法对如何对控制器进行单元测试进行全面了解。我的控制器做了一些任务,我基本上想要测试以执行以下操作:

  1. 它所称的模拟服务。
  2. 模拟范围内的数据。
  3. 测试控制器中特定方法的行为。
  4. 验证:服务已被调用一次。
  5. 验证:服务是否传递了正确的数据。
  6. 我需要尽可能完整的示例如何编写测试,以及用于模拟方法的声明。

    有问题的控制器方法如下所示:

    .controller('ProjectConfigurationCtrl', function($scope, $routeParams, InfraService, ProjectConfigurationService) {
      // some pre-init...
    
      $scope.clickUpdate = function() {
         if ($scope.projectData.Id === 0) {
           ProjectConfigurationService.save(angular.toJson($scope.projectData), function(project) {
          $scope.projectData = project;
          $scope.newproject = false;
          $scope.info = "Project " + project.ProjectName + " created successfully.";
            }, function() {
          $scope.info = "Project " + $scope.projectData.ProjectName + " can not be created: server error.";
          });
          } else {
            ProjectConfigurationService.update(angular.toJson($scope.projectData), function() {
            $scope.info = "Project " + $scope.projectData.ProjectName + " updated successfully.";
            }, function() {
            $scope.info = "Project " + $scope.projectData.ProjectName + " can not be updated: server error.";
      });
    }
    

    我想查看ProjectConfigurationService.save/update是否被调用一次,并检查作为参数到达这些调用的内容。我想要模拟服务返回信息。在调用之后,我想检查$ scope.newproject,$ scope.info等,看看里面是什么。

1 个答案:

答案 0 :(得分:1)

请参阅Angular Unit Testing on Controller using a Service - Breaking on Inject中的答案作为参考茉莉花测试。如果需要,您可以在网上搜索更多示例。

我很高兴看到你对“单元测试”的想法是正确的,所以继续前进。关键是,你必须注入$ controller,它是一个控制器构造函数服务,允许你传递模拟的依赖项。在你的情况下,在你的“它”功能中,你应该有类似的东西:

var projectConfigCtrl = $controller('ProjectConfigurationCtrl', // name of your controller
     /* mocked dependencies */ {$scope: <yourMockedScope, usually $rootScope.$new>,
                                $routeParams: <your mock>,
                                InfraService: <your mock service>,
                                ProjectConfigurationService: <your mock service>});