让我们看看,我们根据:https://docs.angularjs.org/guide/unit-testing
describe('PasswordController', function() {
beforeEach(module('app'));
var $controller;
beforeEach(inject(function(_$controller_){
// The injector unwraps the underscores (_) from around the parameter names when matching
$controller = _$controller_;
}));
describe('$scope.grade', function() {
it('sets the strength to "strong" if the password length is >8 chars', function() {
var $scope = {};
var controller = $controller('PasswordController', { $scope: $scope });
$scope.password = 'longerthaneightchars';
$scope.grade();
expect($scope.strength).toEqual('strong');
});
});
});
现在我正在制作服务和工厂,是否有任何等同于 ____$controller____ 的服务和工厂?所以我可以用其他东西注入(inject)它:
var controller = $controller('PasswordController', { $scope: $scope });
并更改依赖项的内部函数以便我可以对其进行测试,或者是否有更好的方法?
编辑: 使问题更清楚 这是问题的例子:
我有这个:
var app = angular.module("app").service("MyService",["$scope","$http",function($scope,$http){
this.myFunction = function(){
$http.get("/myApi/1");
}
}]);
我如何使用
的等价物var controller = $controller('PasswordController', { $scope: $scope });
所以我可以将 $scope 和 $http 注入(inject)到 myService 中?
最佳答案
您不能随时将依赖项注入(inject)工厂或服务,但您可以使用自定义对象模拟
依赖项,并让 Angular 自动替换它们。您可以为此使用 $provide
。这是一个例子:
angular.module('app').service('some', function(dependencyService) {
});
测试时:
beforeEach(module(function($provide) {
$provide.value('dependencyService', {
});
}));
关于javascript - 单元测试注入(inject)依赖关系,如 angularJS 中的服务 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40234587/