Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在我的子控制器中模拟此方法来测试它?_Javascript_Angularjs_Jasmine_Karma Jasmine - Fatal编程技术网

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();
希望有帮助