Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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 如何使用Karma中的参数测试$on事件_Javascript_Angularjs_Unit Testing_Events_Karma Jasmine - Fatal编程技术网

Javascript 如何使用Karma中的参数测试$on事件

Javascript 如何使用Karma中的参数测试$on事件,javascript,angularjs,unit-testing,events,karma-jasmine,Javascript,Angularjs,Unit Testing,Events,Karma Jasmine,我有控制器代码: $scope.$on('load', function (event) { $scope.getData(); event.stopPropagation(); }); 以及测试代码: it('$on load', function(event) { var controller=createController(); spyOn(scope, '$on').andCallThrough();// I have also tried to sp

我有控制器代码:

$scope.$on('load', function (event) {
    $scope.getData();
    event.stopPropagation();
});
以及测试代码:

it('$on load', function(event) {
    var controller=createController();
    spyOn(scope, '$on').andCallThrough();// I have also tried to spy scope getData
    scope.$broadcast('load');
    expect(scope.$on).toHaveBeenCalledwith("load");
});
TypeError:event.stopPropagation不是函数


如何定义单元测试调用中的参数?

请以另一种方式思考

如果在作用域上触发load事件,那么您希望getData已被调用

在getData上放置一个间谍,然后您可以预期该函数已被调用

我测试这些东西的方法是把间谍放在电视上

 spyOn($scope, '$broadcast').and.callThrough();
 spyOn(event, 'preventDefault').and.callFake(function() {});
然后在描述块中

describe('load event', function() {

  it('should call getData method', function() {
      $scope.$broadcast('load');
      expect($scope.getData).toHaveBeenCalled();
    });

});

用另一种方式来思考

如果在作用域上触发load事件,那么您希望getData已被调用

在getData上放置一个间谍,然后您可以预期该函数已被调用

我测试这些东西的方法是把间谍放在电视上

 spyOn($scope, '$broadcast').and.callThrough();
 spyOn(event, 'preventDefault').and.callFake(function() {});
然后在描述块中

describe('load event', function() {

  it('should call getData method', function() {
      $scope.$broadcast('load');
      expect($scope.getData).toHaveBeenCalled();
    });

});

在您的测试套件中使用StopRopAgation方法创建虚拟事件对象。我已经尝试过,但无法在您的测试套件中使用StopRopAgation方法创建虚拟事件对象。我已经尝试过,但无法工作。它给了我:spyOn无法为preventDefault()找到要监视的对象当我以这种方式添加间谍时,event.stopPropagation不是函数:var e=jasmine.createSpyObj('e',['stopPropagation']);您是否在顶部声明了一个空函数?var event={preventDefault:function(){};是的,我这样做了,继续获取此事件。stopPropagation不是函数。它给了我:spyOn找不到preventDefault()或event的要监视的对象。当我以这种方式添加间谍时,stopPropagation不是函数:var e=jasmine.createSpyObj('e',['stopPropagation');您是否在顶部声明了一个空函数?var event={preventDefault:function(){};是的,我这样做了,继续获取此事件。stopPropagation不是一个函数。