我有一个有方法的 Angular Controller
$scope.handleChange = function (index) {
//Logic
$scope.$parent.doSomething();
};
我似乎找不到方法来测试 handleChange()
方法或使用 jasmine 的 Controller 对象,因为这两个测试都会引发此错误:
类型错误:$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();
});
我做错了什么以及如何解决这个问题?
最佳答案
您可以将范围存储在测试类的变量中,使用 spy 模拟方法 doSomething:
var myScope = $rootScope.$new();
spyOn(myScope.$parent, 'doSomething');
然后将其传递给您的 Controller :
var controllerReference = $controller('MyController', {
$scope: myScope
});
在你的断言 block 上你做这样的事情:
expect(myScope.$parent.doSomething).toHaveBeenCalled();
希望有帮助。
关于javascript - 如何在我的子 Controller 中模拟此方法来测试它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40805314/