2017-09-02 84 views
0

我正在嘗試爲IIFE函數內的以下單擊事件編寫單元測試。我們如何在茉莉花JavaScript單元測試套件中觸發IIFE函數中的單擊事件

jQuery(function($) 
{ 
    $('span.select-toggle').click(function() 
    { 
     $i = $(this); 

     if ($i.parent().find('ul.select-sub').is(':visible')) { 
     $i.removeClass('fa-select-down').addClass('fa-select-right'); 
     } else { 
     $i.removeClass('fa-select-right').addClass('fa-select-down'); 
     } 
    }); 
}); 

HTML fixture文件:

<div id="select"> 
    <ul class="select-stub" style="visibility :visible;"> 
     <span class="select-toggle" ></span> 
    </ul> 
</div> 

單元測試:

describe('Selectmenu Expand/Collapse of a node', function() { 
    beforeAll(function() { 
     spyOnEvent('.select-toggle', 'click'); 
     $('span.select-toggle').trigger("click"); 
    }); 

    it('Should visible parent node', function() { 
     expect($('.select-toggle').parent().find('ul.select-sub:visible').count()).toBe(1); 
    }); 
}); 

但這spyOnEvent click事件中沒有被解僱,而未能通過測試。有人請建議任何更好的解決方案,以觸發IIFE功能內的點擊事件。

回答

0

這是我如何使用IIFE內的事件監聽器,也許它可以幫助。請注意,IIFE內的事件監聽器應始終放置在IIFE的末尾。

!function() { 
    function someFunction(){ 
     //some code 
    } 
    $('body').on('click', '.someClass', someFunction); //event listener 
}(); 
+0

我無法更改腳本的當前行爲。我真的想在單元測試中觸發這個事件監聽器。那麼更好的方法? – supun94