AngularJS- 对匿名 Controller 进行单元测试

标签 angularjs unit-testing angular-ui-router

我正在尝试为我没有编写的使用 的代码编写测试。 ui路由器 .

我想不出一种将 Controller 注入(inject)我的测试的方法,因为它是在另一个 Controller 中配置的状态内内联和匿名编写的:

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

如果 Controller 被命名为 controller: 'TheController'通过在我的测试中这样做,我可以毫无问题地注入(inject)它:
beforeEach(inject(function($controller) {
  $controller('TheController', {/*dependancies to be injected*/});
}));

但由于 Controller 是匿名的,我没有它的句柄,也不知道如何访问它。

最佳答案

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

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

  • 这就是我要做的。

    关于AngularJS- 对匿名 Controller 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26550673/

    相关文章:

    reactjs - 如何在 Jest 中使用 async/await 对 Promise catch() 方法行为进行单元测试?

    angularjs - 为什么要给 "abstract: true"状态一个 url?

    angularjs - 使用 $rootscope 显示和隐藏

    javascript - Angular 事件处理程序属性更改不会触发监听器

    c# - 拆分 xUnit 测试以测试扩展方法的最佳方法

    Android JUnit4 测试 - 从哪里获取上下文?

    javascript - 使用 AngularJS 在 Ui-Router 中嵌套状态

    javascript - $ionicScrollDelegate.scrollTop() 不允许我在向下滚动列表后手动向上滚动

    jquery - 关注 ng-repeat 生成的输入

    javascript - 如何使用 AngularJS 对多个对象应用过滤器?