2013-10-04 76 views
1

我想測試一個指令,使用角度$文檔元素附加一個事件處理程序。但是,當我使用Jasmine和角度模擬對它進行測試時,當指令的linkfn執行時會出現錯誤。

指令是這樣的:

angular.module('myDirective', []).directive('myDirective', 
function() { 
    function keydownHandler(ev) { 
     alert('keydown'); 
    } 
    return { 
     template: '<input type="text" />', 
     link: function ($scope, $document) { 
      $document.on('keydown', keydownHandler); 
     } 
    } 
}); 

錯誤:

TypeError: Object #<Object> has no method 'on' 

回答

1

這不會起作用,因爲該鏈接功能不支持依賴注入。如關於directives的文檔中所述,鏈接函數接受4個參數 - 範圍,元素,屬性和控制器。

link: function(scope, element, attributes, controller) { 
    // do the linking here 
} 

Here是一個視頻,更詳細地描述了這一點。