【发布时间】:2014-10-24 15:01:57
【问题描述】:
我正在尝试为我没有编写的使用 ui-router 的代码编写测试。
我无法找到将控制器注入测试的方法,因为它是在另一个控制器中配置的状态内内联和匿名编写的:
$scope.deleteSomething = function() {
$modal.open(
templateUrl: '/delete-item-modal.html',
controller: ['$scope', '$modalInstance', 'someService',
function($scope, $modalInstance, someService) {
....
}
],
resolve: {
...
}
});
};
如果控制器被命名为 controller: 'TheController' 之类的名称,那么在我的测试中这样注入它就没有问题了:
beforeEach(inject(function($controller) {
$controller('TheController', {/*dependancies to be injected*/});
}));
但由于控制器是匿名的,我没有它的句柄,也不知道如何访问它。
【问题讨论】:
-
所以,你有答案:将控制器重构为命名控制器,使其可测试。
-
@Jb Nizet 是的,但我试图避免这种情况,因为它不是我的代码并且宁愿不重构它。那将是最后的手段。
-
我知道这并不能解决你的问题,但如果不是你的代码,并且你不允许修改它,那么你不应该对它进行单元测试。编写代码的开发人员应该是测试它的人。
-
我可以修改它,但想知道这是否有必要,因为重构它可能有潜在的陷阱。但总的来说,我同意编写代码的开发人员应该编写单元测试。我正在做一份交给我的工作。
标签: angularjs unit-testing angular-ui-router