AngularJS-单元测试匿名控制器

Noa*_*oam 5 unit-testing angularjs angular-ui-router

我正在尝试编写我没写过的使用ui-router的代码的测试.

我无法找到一种方法将控制器注入我的测试,因为它是在另一个控制器中配置的状态内内联和匿名编写的:

$scope.deleteSomething = function() {
  $modal.open(
    templateUrl: '/delete-item-modal.html',
    controller: ['$scope', '$modalInstance', 'someService', 
      function($scope, $modalInstance, someService) {
        ....
      }
    ],
    resolve: {
      ...
    }
  });  
};
Run Code Online (Sandbox Code Playgroud)

如果控制器被命名为类似于controller: 'TheController'我将在我的测试中通过这样做注入它没有问题:

beforeEach(inject(function($controller) {
  $controller('TheController', {/*dependancies to be injected*/});
}));
Run Code Online (Sandbox Code Playgroud)

但由于控制器是匿名的,我没有处理它,也无法弄清楚如何访问它.

小智 0

这是一个站不住脚的局面。您应该对准备修改的代码进行单元测试,以防止回归。如果您无法在当前状态下对它进行单元测试,那么您唯一的选择就是对其进行集成测试。向请求这项工作的人解释:

  • 您必须在修改代码之前为代码编写测试。
  • 集成测试将花费更长的时间,但由于代码的结构,这是唯一可能的事情。
  • 通过提取命名控制器进行重构是一种复制粘贴,风险较低。
  • 命名控制器可以轻松进行单元测试。

这就是我要做的。