2016-11-23 83 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

相關問題