2016-11-23 46 views
0

我有initcontroller像下面,我怎么能测试这个方法:

vm.init = function ($event) { 
    var target = angular.element($event.target); 
    if(target.prop('tagName').toUpperCase() == 'A') { 
    return false; 
    } 
}; 

TestSpec

beforeEach(function(){ 

    vm.init = sinon.spy(); 
    compiled = $compile(template)($scope); 

    $scope.$digest(); 

    mockEvent = new Event('click'); 
    sinon.spy(mockEvent, 'preventDefault'); 
}); 

it('init() method should return false', function() { 
    vm.init(mockEvent);  
}); 

TypeError: Cannot read property 'target' of undefined 

如何传递的$event这里,下面是我的事件触发的HTML。

template = '<div id="fre"><span ng-click="init($event)"></span></div>'; 

回答

1

您可以模拟$event创建一个目标属性设置为任何HTML字符串的对象。

it('init() method should return false', function() { 
    var mockEvent = { 
    target: '<a href="#">Click</a>' 
    }; 
    expect(controller.init(mockEvent)).toBe(false) 
}); 
+0

如果我想检查$ event.preventDefault(),该怎么办? – Shane

+0

您可以添加一个'preventDefault'属性作为函数或间谍。 – Puigcerber

相关问题