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

时间:2016-02-01 17:34:44

标签: 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 spy scope getData
    scope.$broadcast('load');
    expect(scope.$on).toHaveBeenCalledwith("load");
});

TypeError:event.stopPropagation不是函数

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

1 个答案:

答案 0 :(得分:2)

以不同的方式思考......

如果在示波器上触发load事件,那么你应该调用getData ...

在getData上放置一个间谍,然后你可以期待该函数被调用。

我测试这种方式的方法是将间谍放在$ broadcast上。

 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();
    });

});