2014-10-08 170 views
1

我無法通過ng-mouseenter指令測試我的指令。ng-mouseenter的茉莉花測試

我想測試幾件事情,但首先,我需要測試提供給ng-mouseenter的方法是否被調用。

我的測試:

describe('hover tests', function() { 
     it('the triggerPopover method should be called on hover', function() { 
      spyOn($scope, 'triggerPopover'); 
      var ars = jQuery(view.find('article.the-class-im-looking-for')); 
      jQuery(ars[0]).trigger('mouseenter'); 
      expect($scope.triggerPopover).toHaveBeenCalled(); 
     }); 
    }); 

我的指令使用:

<article my-directive ng-mouseenter="triggerPopover();"></article> 

結果:

預計間諜triggerPopover已被調用。 的NG-的mouseenter東西似乎沒有如果您使用PhantomJS爲你的測試被調用

+0

是否有甚至DOM存在在茉莉花測試環境中?我以爲你必須使用'$ compile'服務。請參閱https://docs.angularjs.org/guide/unit-testing#directives – Phil 2014-10-09 00:34:02

+0

爲簡潔起見,我縮短了代碼示例。在我們到達這一點之前,所有正常的事情都已經完成。 – binarygiant 2014-10-09 01:41:26

回答

0

,在正常的瀏覽器工作的一些鼠標事件將無法正常工作。 如果確實如此,您可以使用Chrome或Firefox運行測試,或者針對相關問題實施類似this answer的解決方案。

0

mouseenter作爲原生DOM事件是不是所有的瀏覽器都支持:http://www.quirksmode.org/dom/events/index.html

ng-mouseenter建立在mouseover事件,所以你可以觸發它是這樣的:

jQuery(ars[0]).trigger('mouseover'); 
+0

'mouseenter'的支持有所改善。 quirksmode頁面自2011年以來未更新。請參閱https://developer.mozilla.org/en-US/docs/Web/Events/mouseenter#Browser_compatibility – Chic 2015-12-30 18:25:00