我有一个角度控制器,它有一个方法
$scope.handleChange = function (index) {
//Logic
$scope.$parent.doSomething();
};
我似乎无法找到用jasmine测试handleChange()
方法或控制器对象的方法,因为两个测试都会抛出此错误:
TypeError: $scope.$parent.doSomething is not a function
我做到了这一点:
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();
});
我做错了什么,我该如何解决?
答案 0 :(得分:0)
您可以将范围存储在测试类的变量中,使用间谍模拟方法doSomething:
var myScope = $rootScope.$new();
spyOn(myScope.$parent, 'doSomething');
然后将其传递给您的控制器:
var controllerReference = $controller('MyController', {
$scope: myScope
});
在您的断言块中,您可以执行以下操作:
expect(myScope.$parent.doSomething).toHaveBeenCalled();
希望有所帮助。