gpt4 book ai didi

javascript - 我是否应该将函数从 Controller 移至服务,但为了单元测试而必须使用 rootScope 而不是作用域?

转载 作者:行者123 更新时间:2023-12-03 09:23:46 25 4
gpt4 key购买 nike

我有这个项目,我可以在 Controller 或服务中使用该功能。但是,为了进行单元测试,函数最好位于服务中,但随后我必须将变量绑定(bind)到全局范围。值得权衡吗?

最佳答案

如果将其转移到服务中有意义,那么您绝对应该这样做。至于将其绑定(bind)到 $rootScope 作为 $scope 的替代方案,因为您正在移动它,也许您应该考虑返回 Controller 可以绑定(bind)到的服务函数的结果。例如:

.factory('YourService', function() {
return {
//needs to be theFunction: function theFunction, not theFunction:theFunction
theFunction: function theFunction(param1, ...) {
var results = ... some complicated logic ...
return results;
}
};
});

.controller('YourController', ['$scope', 'YourService', function($scope, YourService) {
...

$scope.results = YourService.theFunction($scope.param1, ...);

...
}]);

或者,如果函数执行一些异步功能,则返回一个 promise 并在 Controller 中执行类似的操作:

.controller('YourController', ['$scope', 'YourService', function($scope, YourService) {
...

YourService.theFunction($scope.param1, ...).then(function(results) {
$scope.results = results;
}, function(err) {...handle errors});

...
}]);

通过执行类似的操作来远离 $rootScope 将使您的服务更具可测试性,因为它将具有更少的依赖项。

关于javascript - 我是否应该将函数从 Controller 移至服务,但为了单元测试而必须使用 rootScope 而不是作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com