【问题标题】:Mocking service for Jasmine testing?茉莉花测试的模拟服务?
【发布时间】:2014-03-06 13:11:17
【问题描述】:

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

  1. 它调用的模拟服务。
  2. 范围内的模拟数据。
  3. 测试控制器中特定方法的行为。
  4. 验证:服务已被调用一次。
  5. 验证:服务传递了正确的数据。

我需要尽可能完整的示例如何编写测试,以及使用哪些声明来模拟方法。

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

.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 等,看看里面有什么。

【问题讨论】:

    标签: angularjs unit-testing jasmine


    【解决方案1】:

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

    我很高兴看到您关于“单元测试”的想法是正确的,所以请继续。关键是,您必须注入 $controller 这是一个控制器构造函数服务,允许您传递模拟的依赖项。在您的情况下,在您的“it”函数中,您应该具有以下内容:

    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>});
    

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      相关资源
      最近更新 更多