Javascript 如何在我的子控制器中模拟此方法来测试它?
我有一个角度控制器,它有一个方法Javascript 如何在我的子控制器中模拟此方法来测试它?,javascript,angularjs,jasmine,karma-jasmine,Javascript,Angularjs,Jasmine,Karma Jasmine,我有一个角度控制器,它有一个方法 $scope.handleChange = function (index) { //Logic $scope.$parent.doSomething(); }; 我似乎找不到用jasmine测试handleChange()方法或控制器对象的方法,因为这两个测试都会抛出以下错误: TypeError:$scope.$parent.doSomething不是一个函数 我已经做到了: beforeEach(inject(function ($con
$scope.handleChange = function (index) {
//Logic
$scope.$parent.doSomething();
};
我似乎找不到用jasmine测试handleChange()
方法或控制器对象的方法,因为这两个测试都会抛出以下错误:
TypeError:$scope.$parent.doSomething不是一个函数
我已经做到了:
beforeEach(inject(function ($controller, $injector, $q, $rootScope) {
var qReference = $q;
var rootScopeReference = $rootScope;
var $scope = rootScopeReference.$new();
var controllerReference = $controller('MyController', {
$scope: $scope
});
}));
it('Test Case-1: Mycontroller is defined', function () {
expect(controllerReference).toBeDefined();
});
我做错了什么?如何解决这个问题?您可以将作用域存储在测试类的变量中,使用间谍模拟方法doSomething:
var myScope = $rootScope.$new();
spyOn(myScope.$parent, 'doSomething');
然后将其传递给控制器:
var controllerReference = $controller('MyController', {
$scope: myScope
});
在断言块上执行以下操作:
expect(myScope.$parent.doSomething).toHaveBeenCalled();
希望有帮助。您可以将作用域存储在测试类的变量中,使用spy模拟doSomething方法:
var myScope = $rootScope.$new();
spyOn(myScope.$parent, 'doSomething');
然后将其传递给控制器:
var controllerReference = $controller('MyController', {
$scope: myScope
});
在断言块上执行以下操作:
expect(myScope.$parent.doSomething).toHaveBeenCalled();
希望有帮助